1. 如何用MySQL 命令进行备份和恢复?以test 库为例,创建一个备份,并再用此备份进行恢复
备份:mysqldump -u root -p test > test.sql
恢复:mysql < test.sql
2. 在mysql客户端查询工具中,如何获取当前的所有连接进程信息
show full processlist\G
3. 如何删除已满的数据库日志信息
在my.cnf中的[mysqld]段下面加入:expire-logs-days=7(设置自动清除7天前的logs),重启mysql; 或者登录mysql,执行:purge binary logs to 'mysql-bin.000003';
删除bin-log(删除mysql-bin.000003之前的而没有包含mysql-bin.000003) 如果是mysql主从环境的,删除日志,语句格式如下: PURGE {MASTER | BINARY} LOGS TO ‘log_name’ PURGE {MASTER | BINARY} LOGS BEFORE ‘date’
4. 新安装MYSQL后怎样提升MYSQL的安全级别
一、 删除test数据库:drop database test;
删除不用的用户:drop user 'root'@'::1'; drop user ''@'centos6-2'; drop user ''@'locaohost';
或全部删除,添加管理员:delete from mysql.user; grant all privileges on *.* to system@'localhost' identified by '123456' with grant option;
二、 对用户设置较复杂密码并严格指定对应账号的访问IP(可在mysql库中user表中指定用户的访问可访问 IP地址,root限制为只允许本地登陆)
三、开启二进制查询日志和慢查询日志
四、mysql安装目录及数据目录权限控制:给mysql安装目录读取权限,给mysql日志和数据所在目录读取和写入权限
五、修改mysql默认端口,linux下可以通过iptables来 限制访问mysql端口的IP地址
5. MYSQL的主从原理,怎么配置文件
A.master将改变记录到二进制日志(binary log)中(这些记录叫做二进制日志事件,binary log events);
B.slave将master的binary log events拷贝到它的中继日志(relay log);
C.slave重做中继日志中的事件,将改变反映它自己的数据。
(1)Slave上面的IO线程连接上Master,并请求从指定日志文件的指定位置(或者从最开始的日志)之后的 日志内容;
(2)Master接收到来自Slave的IO线程的请求后,通过负责复制的IO线程根据请求信息读取指定日志指定位 置之后的日志信息,返回给Slave端的IO线程。返回信息中除了日志所包含的信息之外,还包括本次返回的信 息在Master端binary log文件的名称以及在Binary log中的位置;
(3)Slave的IO线程收到信息后,将接收到的日志内容依次写入到Slave端的RelayLog文件(mysqlrelay-lin.xxxxx)的最末端,并将读取到的Master端的bin-log的文件名和位置记录到master-info文 件中,以便在下一次读取的时候能够清楚的告诉master“我需要从某个bin-log的哪个位置开始往后的日志内 容,请发给我”
(4)Slave的SQL线程检测到Relay Log中新增加了内容后,会马上解析该Log文件中的内容成为在Master 端真实执行时候的那些可执行的查询或操作语句,并在自身执行那些查询或操作语句,这样,实际上就是在 master端和Slave端执行了同样的查询或操作语句,所以两端的数据是完全一样的。
6. mysql主从复制的优点
<1> 如果主服务器出现问题, 可以快速切换到从服务器提供的服务;
<2> 可以在从服务器上执行查询操作, 降低主服务器的访问压力;
<3> 可以在从服务器上执行备份, 以避免备份期间影响主服务器的服务。
7. 什么是裸设备,他的好处是什么?,mysql支持裸设备吗?
裸设备:也叫裸分区(原始分区),是一种没有经过格式化,不被Unix/Linux通过文件系统来读取的特殊字符设备。裸设备可以绑定一个分区,也可以绑定一个磁盘。
好处:因为使用裸设备避免了再经过操作系统这一 层,数据直接从Disk到数据库进行传输,所以使用裸设备对于读写频繁的数据库应用来说,可以极大地提高数 据库系统的性能。当然,这是以磁盘的 I/O 非常大,磁盘I/O已经成为系统瓶颈的情况下才成立。如果磁盘 读写确实非常频繁,以至于磁盘读写成为系统瓶颈的情况成立,那么采用裸设备确实可以大大提高性能,最大 甚至可以提高至40%,非常明显。 mysql支持裸设备
8. socket和tcp访问mysql的区别?
B树,每个节点都存储key和data,所有节点组成这棵树,并且叶子节点指针为nul,叶子结点不包含任何关键 字信息。
B+树,所有的叶子结点中包含了全部关键字的信息,及指向含有这些关键字记录的指针,且叶子结点本身依关键字的大小自小而大的顺序链接 所有的非终端结点可以看成是索引部分,结点中仅含有其子树根结点中最大(或最小)关键字。 (而B 树的非终节点也包含需要查找的有效信息)
9. MySQL高可用方案有哪些,各自特点,企业如何选择?
1. 主从复制+读写分离 优点:成本低、架构简单、易实施、维护方便 缺点:master出现问题后不能自动到slave上,需要人工干涉。
2. MySQL Cluster 优点:安全性高,稳定性高。可以在线增加节点 缺点:架构复杂,至少三个节点,对于引擎只能用ndb,不支持外键,管理复杂,部署费时而且是收费的。
3. Heartbeat /keepalived+双主从复制 优点:安全性、稳定性高,出现故障系统将自动切换,从而保证服务的连续性。 缺点:可能会发生脑裂
4. HeartBeat+DRBD+MySQL 优点:安全性、稳定性、出现故障系统将自动切换,从而保证服务的连续性。 缺点:只用一台服务器提供服务,成本高,可能发生脑裂
10.如何授权test1用户从172.16.1.0/24访问数据库
mysql> grant all on *.* to test1@'172.16.1.%' identified by '123456';
11. 什么是MySQL多实例,如何配置MySQL多实例?
在一台服务器上,mysql服务开启多个不同的端口,运行多个服务进程,这些mysql服务进程通过不同的 socket来监听不同的数据端口,进而互不干涉的提供各自的服务。
12. mysql的权限怎么管理?
只给insert,update,select和delete四个权限即可。对权限管理比较严格的情况delete也不会给,让研 发走逻辑删除位标识。
13. MySQL Sleep线程过多如何解决?
mysql> show processlist\G
# mysqladmin -uroot -p123456 processlist
修改my.cnf文件里的wait_timeout的值,让其更小一些,默认wait_timeout =28800,这里改为100
mysql> set global wait_timeout=100; mysql> show global variables like "wait_timeout";
14. sort_buffer_size参数作用?如何在线修改生效?
mysql执行排序使用的缓冲大小。如果想要增加order by的速度,首先看是否可以让mysql使用索引而不是 额外的排序阶段,如果不能,可以尝试增加sort_buffer_size变量的大小。
mysql> set global sort_buffer_size =131072;
#单位为B,即128KB,默认64K
15. 如何在线正确清理MySQL binlog?
自动清除
mysql> set global expire_logs_days=30;
#设置binlog过期时间为30天 手动清除
mysql> purge binary logs to "mysql-bin.000007";
#/删除mysql-bin.000007之前的所有 binlog日志
16. 误操作执行了一个drop库SQL语句,如何完整恢复?
如果条件允许,操作前最好禁止外面一切服务器访问mysql数据库,这里假设禁止外面访问数据库,具体步骤 如下:
1 手动切割binlog日志并记好切割好的binlog日志文件位置,这里假设为009,备份全部binlog日志
2 找到之前全备数据最后备份到的binlog文件位置并记好位置,这几假设为005
3 用mysqladmin命令将005到008binlog文件中的SQL语句分离出来,并找到drop库的语句将其删掉
4 将之前全备数据导入mysql服务器
5 将步骤3中分离出的SQL语句导入mysql服务器
6 将009binlog文件删除,再次刷新binlog日志,到此数据库已恢复成功
17. 详述MySQL主从复制原理及配置主从的步骤
1 主:binlog线程,记录所有改变了数据库数据的语句,放进master上的binlog中
2 从:IO线程,在使用start slave之后,负责从master上拉取binlog内容,放进自己的relay log中
3 从:SQL执行线程,执行relay log中的语句。
配置步骤:
1 主库开启binlog日志功能
2 全备数据库,记录好binlog文件和相应的位置
3 从库上配置和主库的连接信息
4 将全备数据导入从库
5 从库启动slave
6 在从库上查看同步状态,确认是否同步成功
18. MySQL出现复制延迟有哪些原因?如何解决?
1 一个主库的从库太多,导致复制延迟 建议从库数量3-5个为宜,要复制的从节点数量过多,会导致复制延迟
2 从库硬件比主库差,导致复制延迟 查看master和slave的系统配置,可能会因为机器配置问题,包括磁盘IO、CPU、内存等各方面因素造成复制 的延迟,一般发生在高并发大数据量的写入场景。
3 慢SQL语句过多 假如一条SQL语句执行时间是20秒,那么执行完毕到从库上能查到数据也至少是20秒,可以修改后分多次写 入,通过查看慢查询日志或show full processlist命令找出执行时间长的查询语句或者大的事务。
4 从复制设计问题 主从复制单线程,如果主库写并发太大,来不及传送到从库就会导致延迟。更高版本的mysql可以支持多线程 复制,门户网站则会自己开发多线程同步功能。
5 主从库之间网络延迟 主从库的网卡,网线,连接的交换机等网络设备都可能成为复制的瓶颈,导致复制延迟,另外,跨公网主从复 制很容易导致主从复制延迟。
6 主库读写压力大,导致复制延迟 主库硬件要搞好一点,架构的前端要加buffer。
19. 请详细描述char(4)和varchar(4)的差别
char(4)定义的是固定长度4,存储时,如果字符数不够4位,会在后面用空格补全存入数据库。
varchar(4)定义的是变长长度,存储时,如果字符没有达到定义的位数4时,也不会在后面补空格。
20. 如何监控主从复制是否故障?
查看slave端的IO和SQL进程状态是否OK,同步延迟时间是否小于1分钟
mysql> show slave status\G
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Seconds_Behind_Master: 0
21.生产一主多从从库宕机,如何手工恢复?
处理方法:重做slave 1. 停止slave 2. 导入备份数据 3. 配置master.info信息 4. 启动slave 5. 检查从库状态
22. MySQL的SQL语句如何优化?
1. 在表中建立索引,优先考虑where、group by使用到的字段
2. 尽量避免使用select *,返回无用的字段会降低查询效率
3. 尽量避免使用in和not in,会导致数据库引擎放弃索引进行全表扫描
4. 尽量避免使用or,会导致数据库引擎放弃索引进行全表扫描
5. 尽量避免在字段开头模糊查询,会导致数据库引擎放弃索引进行全表扫描
23.如果发现CPU,或者IO压力很大,怎么定位问题?
1、首先我会用top命令和iostat命令,定位是什么进程在占用cpu和磁盘io;
2、如果是mysql的问题,我会登录到数据库,通过show full processlist命令,看现在数据库在执行什 么sql语句,是否有语句长时间执行使数据库卡住;
3、执行show engine innodb status\G命令,查看数据库是否有锁资源争用;
4、查看mysql慢查询日志,看是否有慢sql;
5、找到引起数据库占用资源高的语句,进行优化,该建索引的建索引,索引不合适的删索引,或者根据情况 kill掉耗费资源的sql语句等