学习MySql(一)
一、安装部署mysql
1、安装mysql:
# yum -y install autoconf libaio libaio-devel # groupadd mysql # useradd -r -g mysql -s /sbin/nologin mysql # wget http://mirrors.sohu.com/mysql/MySQL-5.6/mysql-5.6.36-linux-glibc2.5-x86_64.tar.gz #下载编译完成的包,性能更可靠 # tar -zxvf mysql-5.6.36-linux-glibc2.5-x86_64.tar.gz # mv mysql-5.6.36-linux-glibc2.5-x86_64 /usr/local/mysql-5.6.36 # ln -s /usr/local/mysql-5.6.36 /usr/local/mysql # chown -R mysql:mysql /usr/local/mysql-5.6.36/
2、创建配置文件:
# vim /data/3306/my.cnf
[client] port = 3306 socket = /data/3306/mysql.sock [mysql] no-auto-rehash [mysqld] user = mysql port = 3306 socket = /data/3306/mysql.sock basedir = /usr/local/mysql datadir = /data/3306/data tmpdir = /tmp open_files_limit = 65535 character-set-server = utf8mb4 back_log = 500 max_connections = 3000 max_connect_errors = 10000 #table_cache = 6144 max_allowed_packet =8M sort_buffer_size = 1M join_buffer_size = 1M thread_cache_size = 100 thread_concurrency = 2 query_cache_size = 64M query_cache_type = 1 #default_table_type = InnoDB #transaction_isolation = READ-COMMITTED tmp_table_size = 512M max_heap_table_size = 256M table_open_cache = 512 log_error=/data/3306/mysql_3306.err slow_query_log_file = /data/3306/mysql-slow.log slow_query_log = 1 long_query_time =0.5 pid-file = /data/3306/mysql.pid log-bin = /data/3306/mysql-bin relay-log = /data/3306/relay-bin relay-log-info-file = /data/3306/relay-log.info binlog_cache_size = 2M binlog_format = row log-slave-updates max_binlog_cache_size = 4M max_binlog_size = 256M expire_logs_days = 7 #myisam_sort_buffer_size = 1M #myisam_max_sort_file_size = 10G #myisam_max_extra_sort_file_size = 10G #myisam_repair_threads = 1 #myisam_recover skip-name-resolve skip-host-cache replicate-ignore-db = mysql server-id = 71 innodb_additional_mem_pool_size = 8M innodb_buffer_pool_size = 16G #设置成内存的60-70%最好 innodb_data_file_path = ibdata1:128M;ibdata2:128M:autoextend innodb_flush_method = O_DIRECT innodb_flush_log_at_trx_commit = 2 innodb_log_buffer_size = 4M innodb_log_file_size = 2G innodb_log_files_in_group = 3 innodb_file_per_table = 1 [mysqldump] quick max_allowed_packet = 8M
3、初始化数据库:
# chown mysql.mysql -R /data/3306/ # cd /usr/local/mysql/scripts/ # ./mysql_install_db \ --defaults-file=/data/3306/my.cnf \ --basedir=/usr/local/mysql/ \ --datadir=/data/3306/data/ --user=mysql #添加环境变量 # echo 'export PATH=/usr/local/mysql/bin/:$PATH' >> /etc/profile # source /etc/profile
4、启动数据库:
# /usr/local/mysql/bin/mysqld_safe --defaults-file=/data/3306/my.cnf &
5、设置数据库密码:
mysqladmin -uroot password Root123 -S /data/3306/mysql.sock
6、创建数据库启动脚本:
#!/bin/sh port=3306 mysql_user="root" mysql_pwd="Root123" cmdpath="/usr/local/mysql/bin" mysql_sock="/data/${port}/mysql.sock" #start function function_start_mysql() { if [ ! -e "$mysql_sock" ];then echo "starting mysql…" /bin/sh ${cmdpath}/mysqld_safe --defaults-file=/data/${port}/my.cnf 2>&1 > /devull & else echo "mysql is running…" exit fi } #stop function function_stop_mysql() { if [ ! -e "$mysql_sock" ];then echo "mysql is stopped…" else echo "stoping mysql…" ${cmdpath}/mysqladmin -u ${mysql_user} -p${mysql_pwd} -S /data/${port}/mysql.sock shutdown fi } #restart function function_restart_mysql() { echo "restarting mysql…" function_stop_mysql sleep 2 function_start_mysql } case $1 in start) function_start_mysql ;; stop) function_stop_mysql ;; restart) function_restart_mysql ;; *) echo "usage: /data/${port}/mysql {start|stop|restart}" esac
二、mysql的备份恢复
1、Xtrabackup介绍
MySQL冷备:mysqldump,热备:xtrabakackup有2个工具,分别是xtrabakup、innobakupe,支持MySQL、Percona server和MariaDB。
xtrabackup只能备份innoDB和xtraDB两种数据引擎的表,而不能备份MyISAM数据表。
2、Xtrabackup优点
1 备份速度快,物理备份可靠 2 备份过程不会打断正在执行的事务(无需锁表) 3 能够基于压缩等功能节约磁盘空间和流量 4 自动备份校验 5 还原速度快 6 可以流传将备份传输到另外一台机器上 7 在不增加服务器负载的情况备份数据
3、Xtrabackup备份原理
Xtrabackup备份流程图:
1 innobackupex启动后,会先fork一个进程,用于启动xtrabackup,然后等待xtrabackup备份ibd数据文件; 2 xtrabackup在备份innoDB数据是,有2种线程:redo拷贝线程和ibd数据拷贝线程。xtrabackup进程开始执行后,会启动一个redo拷贝的线程,用于从最新的checkpoint点开始顺序拷贝redo.log;再启动ibd数据拷贝线程,进行拷贝ibd数据。这里是先启动redo拷贝线程的。在此阶段,innobackupex进行处于等待状态(等待文件被创建) 3 xtrabackup拷贝完成ibd数据文件后,会通知innobackupex(通过创建文件),同时xtrabackup进入等待状态(redo线程依旧在拷贝redo.log) 4 innobackupex收到xtrabackup通知后哦,执行FLUSH TABLES WITH READ LOCK(FTWRL),取得一致性位点,然后开始备份非InnoDB文件(如frm、MYD、MYI、CSV、opt、par等格式的文件),在拷贝非InnoDB文件的过程当中,数据库处于全局只读状态。 5 当innobackup拷贝完所有的非InnoDB文件后,会通知xtrabackup,通知完成后,进入等待状态; 6 xtrabackup收到innobackupex备份完成的通知后,会停止redo拷贝线程,然后通知innobackupex,redo.log文件拷贝完成; 7 innobackupex收到redo.log备份完成后,就进行解锁操作,执行:UNLOCK TABLES; 8 最后innbackupex和xtrabackup进程各自释放资源,写备份元数据信息等,innobackupex等xtrabackup子进程结束后退出。
4、xtrabackup的安装部署
1) xtrabackup的yum安装
1、yum安装
下载地址:https://www.percona.com/downloads/XtraBackup/LATEST/
# wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.9/binary/redhat/7/x86_64/percona-xtrabackup-24-2.4.9-1.el7.x86_64.rpm # yum install -y percona-xtrabackup-24-2.4.9-1.el7.x86_64.rpm
2) xtrabackup的二进制安装
这种安装方法也很简单,不象rpm包需要安装依赖包,只需解压安装文件,为了方便可创建软连接。 1、检查libgcrypt的版本: # rpm -aq | grep libgcrypt
2、下载XtraBackup # wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.12/binary/tarball/percona-xtrabackup-2.4.12-Linux-x86_64.libgcrypt145.tar.gz 3、解压缩文件 # tar xf percona-xtrabackup-2.4.12-Linux-x86_64.libgcrypt145.tar.gz # mv percona-xtrabackup-2.4.12-Linux-x86_64 /home/tom/xtr # ln -s /home/tom/xtr/bin/* /home/tom/bin/
5、Xtrabackup工具介绍
1、参数选项 xtrabackup:是用于热备innodb,xtradb表中数据的工具,不能备份其他类型的表,也不能备份数据表结构; innobackupex:是将xtrabackup进行封装的perl脚本,提供了备份myisam表的能力。 常用选项: --host #指定主机 --user #指定用户名 --password #指定密码 --port #指定端口 --databases #指定数据库 --incremental #创建增量备份 --incremental-basedir #指定包含完全备份的目录 --incremental-dir #指定包含增量备份的目录 --apply-log #对备份进行预处理操作(备份后的数据,含有未提交的事务,通过回滚,保证数据一致性) --redo-only #不回滚未提交事务 --copy-back #恢复备份目录 --no-timestamp #不创建以时间命名的目录(默认以时间命名) 2、innobackupex文件介绍 使用innobackupex备份时,会调用xtrabackup备份所有的InnoDB表,复制所有关于表结构定义的相关文件(.frm)、 以及MyISAM、MERGE、CSV和ARCHIVE表的相关文件,同时还会备份触发器和数据库配置信息相关的文件 1)xtrabackup_checkpoints 备份类型(完全或增量)、备份状态(是否已为prepared状态)和LSN(日志序列号)范围信息 每个InnoDB页(通常为16k大小)都会包含一个日志序列号,即LSN,LSN是整个数据库系统的系统版本号 2)xtrabackup_binlog_info 二进制日志文件及位置点 3)xtrabackup_binlog_pos_innodb 二进制日志文件及用于InnoDB或XtraDB表的二进制日志文件的当前position 4)xtrabackup_binary 备份中用到的xtrabackup的可执行文件 5)backup-my.cnf 备份命令用到的配置选项信息
6、创建一个最小权限的备份用户
mysql> CREATE USER 'bkpuser'@'localhost' IDENTIFIED BY '123456'; mysql> REVOKE ALL PRIVILEGES,GRANT OPTION FROM 'bkpuser'; mysql> GRANT RELOAD,LOCK TABLES,RELICATION CLIENT ON *.* TO 'bkpuser'@'localhost'; mysql> FLUSH PRIVILEGES;
7、xtrabackup全量备份与恢复
备份: # innobackupex --user=bkpuser --password=123456 --defaults-file=/etc/my.cnf /BACKUP-DIR/ # innobackupex -uroot -p123456 -H127.0.0.1 --stream=tar /tmp >/home/tom/all.tar #非压缩方式 # innobackupex -uroot -p123456 -H127.0.0.1 --stream=tar /tmp | gzip >/home/tom/all.tar.gz #压缩方式 恢复: # innobackupex --apply-log /backups/2018-07-30_11-04-55/ # innobackupex --copy-back --defaults-file=/etc/my.cnf /backups/2018-07-30_11-04-55/ # innobackupex --move-back --defaults-file=/etc/my.cnf /backups/2018-07-30_11-04-55/ 备份到远程 # innobackupex -uroot -p123456 -H127.0.0.1 --stream=tar /tmp | sshpass -p '123456' ssh root@IP "cat - > /root/all.tar" #非压缩方式 # innobackupex -uroot -p123456 -H127.0.0.1 --stream=tar /tmp | sshpass -p '123456' ssh root@IP "gzip > /root/all.tar" #压缩方式 注意:解压时tar +i参数, tar -xizf all.tar.gz
8、全量备份与恢复示例
1) 全量备份 # innobackupex --user=root --password=123456 --host=127.0.0.1 /backups/
# ll 2018-07-30_11-01-37/ -rw-r----- 1 root root 418 Jul 30 11:01 backup-my.cnf #备份用到的配置选项信息文件 -rw-r----- 1 root root 79691776 Jul 30 11:01 ibdata1 #数据文件
-rw-r----- 1 root root 21 Jul 30 11:01 xtrabackup_binlog_info #mysql服务器当前正在使用的二进制日志文件及位置点 -rw-r----- 1 root root 113 Jul 30 11:01 xtrabackup_checkpoints #备份的类型、状态和LSN状态信息文件 -rw-r----- 1 root root 482 Jul 30 11:01 xtrabackup_info -rw-r----- 1 root root 2560 Jul 30 11:01 xtrabackup_logfile #备份的日志文件 2) 恢复 # /etc/init.d/mysqld stop # yum install -y percona-xtrabackup-24-2.4.9-1.el7.x86_64.rpm # scp -r 2018-07-30_11-01-37/ root@192.168.56.12:/backups/ # innobackupex --apply-log /backups/2018-07-30_11-01-37/ #合并数据,使数据文件处于一致性的状态# rm -rf /usr/local/mysql/data/ #在slave上删除原有的数据# innobackupex --copy-back /backups/2018-07-30_11-01-37/ #在slave上数据恢复
# chown -R mysql.mysql /usr/local/mysql/data/ # /etc/init.d/mysqld start # mysql -uroot -p -e "show databases;"
注意:备份时需启动MySQL,恢复时需关闭MySQL,清空mysql数据目录,且不能重新初始化
9、xtrabackup增量备份与恢复
1、增量备份(基于全量备份) # innobackupex --user=root --password=root --defaults-file=/etc/my.cnf --incremental /backups/ --incremental-basedir=/backups/2018-07-30_11-01-37
2、合并全备数据 # innobackupex --user=root --password=root --defaults-file=/etc/my.cnf --apply-log --redo-only /backups/2018-07-30_11-01-37
3、合并增量数据 # innobackupex --user=root --password=root --defaults-file=/etc/my.cnf --apply-log --redo-only /backups/2018-07-30_11-01-37 --incremental-dir=/backups/2018-07-30_13-51-47/
4、 恢复 # innobackupex --copy-back --defaults-file=/etc/my.cnf /opt/2017-01-05_11-04-55/
5、备注: 1) 2018-07-30_11-01-37 是全备的目录。
2) 2018-07-30_13-51-47 是增量备份的目录,如果有多次增量备份,每一次都要执行如上操作
10、增量备份与恢复实例
1、全备 # innobackupex --user=root --password=123456 --host=127.0.0.1 /backups/ 2、增量备份 # innobackupex --user=root --password=123456 --host=127.0.0.1 --incremental /backups/ --incremental-basedir=/backups/2018-07-30_11-01-37/ 3、查看文件 drwxr-x--- 7 root root 232 Jul 30 11:01 2018-07-30_11-01-37 #全量备份数据目录 drwxr-x--- 8 root root 273 Jul 30 13:51 2018-07-30_13-51-47 #增量备份数据目录 # cat xtrabackup_checkpoints backup_type = full-backuped #备份类型为全量备份 from_lsn = 0 #lsn从0开始 to_lsn = 3127097 #lsn到3127097结束 last_lsn = 3127097 # cat xtrabackup_checkpoints backup_type = incremental #备份类型为增量备份 from_lsn = 3127097 #lsn从3127097开始 to_lsn = 3158741 #lsn到啊3158741结束 last_lsn = 3158741 4、模拟故障,删除数据目录所有数据 # /etc/init.d/mysqld stop # rm -rf /usr/local/mysql/data/* 5、合并全备 # innobackupex --apply-log --redo-only /backups/2018-07-30_11-01-37/ 6、合并增量,确保数据的一致性 # innobackupex --apply-log --redo-only /backups/2018-07-30_11-01-37/ --incremental-dir=/backups/2018-07-30_13-51-47/ # cat /backups/2018-07-30_11-01-37/xtrabackup_checkpoints backup_type = log-applied #查看到数据备份类型是增加 from_lsn = 0 to_lsn = 3158741 last_lsn = 3158741 7、恢复数据 # innobackupex --copy-back /backups/2018-07-30_11-01-37/ # chown -R mysql.mysql /usr/local/mysql/data # /etc/init.d/mysqld start # mysql -uroot -p -e "show databases;"
三、mysql主从同步
1、环境准备
1、查看主机名和ip地址 # hostname ;hostname -I db01 10.0.0.51 172.16.1.51 # hostname ;hostname -I db02 10.0.0.52 172.16.1.52 db01: 主库,db02: 从库,从库无数据,server id不能相同,主库开启binlog 2、安装xtrabackup #两台服务器均安装以下软件包。 # wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.7/binary/redhat/6/x86_64/percona-xtrabackup-24-2.4.7-1.el6.x86_64.rpm # yum -y localinstall percona-xtrabackup-24-2.4.7-1.el6.x86_64.rpm 3、创建测试环境 mysql> create database oldboy; mysql> use oldboy mysql> drop table test; mysql> CREATE TABLE test ( id int(4) NOT NULL AUTO_INCREMENT, name char(20) NOT NULL, PRIMARY KEY (id) ) ; mysql> insert into test(id,name) values(1,'oldboy'); mysql> insert into test(name) values('oldgirl'); mysql> insert into test values(3,'inca'); mysql> insert into test values(4,'zuma'),(5,'kaka');
2、xtrabackup全备
1) 在db01上做一次全备 # innobackupex --defaults-file="/etc/my.cnf" --user=root --socket=/application/mysql/tmp/mysql.sock --password=123456 /opt/ #把全备复制到db02 # scp -r /opt/2017-05-05_11-23-50/ 10.0.0.52:/opt/
3、db01插入数据
备份完后,生产环境会有继续写人数据库,插入数据模拟环境 mysql> use oldboy; mysql> insert into test(id,name) values(6,'bing'); mysql> insert into test(id,name) values(7,'zhao'); mysql> insert into test(id,name) values(8,'ya'); mysql> insert into test(id,name) values(9,'ting');
4、预处理(也可以复制到从库再做)
# innobackupex --defaults-file="/etc/my.cnf" --user=root -proot --socket=/tmp/mysql.sock --apply-log --use-memory=1G /opt/2017-05-18_00-13-42/ #备注: --use-memory,设置指定分配多少内存处理数据,可以加快处理速度
5、恢复数据
1) 删除原有的数据
# /etc/init.d/mysqld stop # mv /application/mysql/data /tmp/ 2) 恢复数据(也可以mv命令) # innobackupex --defaults-file="/etc/my.cnf" --user=root --socket=/application/mysql/tmp/mysql.sock --move-back /opt/2017-05-05_11-23-50/ # mv /opt/2017-05-05_11-23-50/ /application/mysql/data/
3) 查看binlog文件名和位置点
# cat xtrabackup_binlog_pos_innodb mysql-bin.000002 1461
4) 修改权限
# chown -R mysql.mysql data
5) 启动mysql
# /etc/init.d/mysqld start
6、创建主从同步用户(db01)
mysql> grant replication slave on *.* to rep@'10.0.0.%' identified by '123456';
mysql> FLUSH PRIVILEGES;
7、做主从同步(db02)
mysql> change master to master_host='10.0.0.51',master_user='rep',master_password='123456',master_log_file='mysql-bin.000002',master_log_pos=1461; mysql> start slave; mysql> show slave status\G;
8.检查数据
四、mysql的延时复制
1、延时同步介绍
1、应用场景 1) 误删除恢复 2) 延迟测试(当有延迟时业务是否会受影响) 3) 历史查询 2、启用方法 mysql> stop slave; mysql> change master to master_delay = 3600; #延迟的时间,单位秒 mysql> start slave; 3、查看 mysql> show slave status\G SQL_Delay: 3600 #从库延时1小时后同步数据 SQL_Remaining_Delay: 3561 #从库延时的实际时间
2、部署主从同步
主库:
1) 修改配置文件
[mysqld] server-id=1 #不能用从库相同 log_bin=mysql-bin #开启日志
2) 创建主从复制用户
mysql> grant replication slave on *.* to rep@'10.0.0.%' identified by '123';
3) 查看主库binlog位置点
show master status;
从库:
1) 修改配置文件
[mysqld] server-id=2
read_only=1
2) 配置主从
mysql> change master to master_host='10.0.0.51',master_user='rep',master_password='123',master_log_file='mysql-bin.000002',master_log_pos=1558;
mysql> start slave;
mysql> set global read_only=1; #从库只读
3、部署延时同步
延时从库配置方法
1、停止主从
mysql> stop slave;
2、设置延时为180秒
mysql> CHANGE MASTER TO MASTER_DELAY = 180;
3、开启主从
mysql> start slave;
4、查看状态
mysql> show slave status\G
SQL_Delay: 180
5、 企业中一般会延时3-6小时
4、延时从库,恢复数据(总数据500G,正常备份去恢复需要1.5-2小时 )
1) 思路
1、停止SQL线程 mysql> stop slave sql_thread; 2、截取relaylog到误删除之前点 relay-log.info 获取到上次运行到的位置点,作为恢复起点 分析relay-log的文件内容,获取到误删除之前position
2) 模拟故障
1、从库,关闭SQL线程 mysql > stop slave sql_thread; 2、截取relay-log 1) 起点: # cat /data/3308/data/relay-log.info db01-relay-bin.000002 283 2) 终点: mysql > show relaylog events in 'db01-relay-bin.000002' db01-relay-bin.000002 | 268047
3、导出sql # mysqlbinlog --start-position=283 --stop-position=268047 /data/3308/data/db01-relay-bin.000002 >/tmp/relay.sql 4、恢复relay.sql mysql> set sql_log_bin=0; mysql> source /tmp/relay.sql
mysql> set sql_log_bin=0;
5、查看数据 mysql> show tables;
五、mysql的半同步复制
1、半同步开启方法
1、主库 1) 安装插件 mysql> show global variables like 'have_dynamic_loading'; #查看是否有动态支持 mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME'semisync_master.so'; #安装插件 mysql> SET GLOBAL rpl_semi_sync_master_enabled = 1; #启动插件 mysql> SET GLOBAL rpl_semi_sync_master_timeout = 1000; #设置超时(毫秒) 2) 修改配置文件 # vim my.cnf [mysqld] rpl_semi_sync_master_enabled=1 rpl_semi_sync_master_timeout=1000 3) 检查安装 mysql> show variables like'rpl%'; mysql> show global status like 'rpl_semi%' 2、从库 1) 安装插件 mysql> INSTALL PLUGIN rpl_semi_sync_slave SONAME'semisync_slave.so'; #安装slave半同步插件 mysql> SET GLOBAL rpl_semi_sync_slave_enabled = 1; #启动插件 mysql> stop slave io_thread; start slave io_thread; #重启io线程使其生效 2) 修改配置文件 # vim my.cnf [mysqld] rpl_semi_sync_slave_enabled =1 3、相关参数说明 rpl_semi_sync_master_timeout=milliseconds 超时时间,如果Master在超时之前没有收到任何确认,将恢复到异步复制,继续执行没有半同步的复制操作 rpl_semi_sync_master_wait_no_slave={ON|OFF} 默认ON,一个事务被提交,Master没有Slave连接,会等待Slave的连接,并确认事务写到磁盘上,设置OFF,如果没有Slave连接,Master恢复到异步复制
2、测试半同步
1、创建两个数据库(test1和test2) mysql> create database test1; mysql> create database test2; 2、查看复制状态 mysql> show global status like 'rpl_semi%';
3、关闭半同步(1:开启,0:关闭) mysql> SET GLOBAL rpl_semi_sync_master_enabled = 0; 4、查看半同步状态 mysql> show global status like 'rpl_semi%';
5、再一次创建两个库 mysql> create database test3; mysql> create database test4; 6、再一次查看半同步状态 mysql> show global status like 'rpl_semi%';
注: 在半同步状态,查询会有延迟时间,关闭之后则没有
六、主从其他
1、主库IO线程常见状态
1) Sending binlog event to slave Binlog dump 线程已读取完binlog日志中的event,现在正在发送给从库 2) Finished reading one binlog; switching to next binlog Binlog dump 线程已读取完一个binlog日志,现在正在打开下一个binlog日志,并发送给从库 3. Master has sent all binlog to slave; waiting for binlog to be updated Binlog dump 线程已读取完所有binlog日志,并已发送到从库,处于空闲状态,等待读取新的binlog 4. Waiting to finalize termination 当线程停止的时,显示此状态,很短暂,几乎看不到
2、从库IO线程常见状态
1) Connecting tomaster 线程正连接主库 2) Checking masterversion 线程检查主库版本 3) Registering slaveon master 线程在主库注册 4) Requesting binlog dump 线程请求binlog,从指定的binlog名和位置点,开始的获取主库的日志 5) Waiting toreconnect after a failed binlog dump request 线程请求失败,进入睡眠状态,等待请求重连,可通过--master-connect-retry设置重试的间隔 6) Reconnectingafter a failed binlog dump request 线程请求重连主库 7) Waiting for master to send event 线程等待主库发送日志 8) Queueing masterevent to the relay log 线程已读取一个日志,并写到relay log中 9) Waiting reconnectafter a failed master event read 线程读取时,出现的错误(因为连接断开),重连前,线程进入sleep状态,sleep的时间: master_connect_try(默认60秒) 10) Reconnectingafter a failed master event read 线程正在尝试重连主库 11) Waiting for theslave SQL thread to free enough relay log space 中继日志已满,I/O线程正在等待SQL线程,通过删除relay log,来释放中继日志的空间,因为设置了relay_log_space_limit参数 12) Waiting for slavemutex on exit 当线程停止的时,显示此状态,很短暂,几乎看不到
3、从库SQL线程常见状态
1) Reading event from the relay log 线程已从中继日志,读取了一个event 2) Has read allrelay log; waiting for the slave I/O thread to update it 线程已处理了中继日志中所有event,正等待IO线程,写人新的日志 3) Waiting for slavemutex on exit 当线程停止的时,显示此状态,很短暂,几乎看不到
4、备份脚本
#!/bin/sh MYUSER=root MYPASS=$(more /mysql/passwd) MYSOCK=/data/3306/mysql.sock MAIN_PATH=/server/backup DATA_PATH=/server/backup LOG_FILE=${DATA_PATH}/mysqllogs_`date+%F`.log DATA_FILE=${DATA_PATH}/mysql_backup_`date+%F`.sql.gz MYSQL_PATH=/application/mysql/bin MYSQL_CMD="$MYSQL_PATH/mysql-u$MYUSER -p$MYPASS -S $MYSOCK" MYSQL_DUMP="$MYSQL_PATH/mysql-u$MYUSER -p$MYPASS -S $MYSOCK -A -B --master-data=1 --single-transaction -e" ${MYSQL_DUMP} |gzip > $DATA_FILE
5、不停主库的一键批量创建从库脚本
#!/bin/sh MYUSER=root MYPASS='123456' MYSOCK=/data/3306/mysql.sock MAIN_PATH=/server/backup DATA_PATH=/server/backup LOG_FILE=${DATA_PATH}/mysqllogs_`date+%F`.log DATA_FILE=${DATA_PATH}/mysql_backup_`date+%F`.sql.gz MYSQL_PATH=/application/mysql/bin MYSQL_CMD="$MYSQL_PATH/mysql-u$MYUSER -p$MYPASS -S $MYSOCK" #恢复全备 cd ${DATA_PATH} gzip -d mysql_backup_`date+%F`.sql.gz $MYSQL_CMD <mysql_backup_`date +%F`.sql #配置主从 cat $MYSQL_CMD << EOF CHANGE MASTER TO MASTER_HOST='192.168.1.2', MASTER_PORT=3306, MASTER_USER='rep', MASTER_PASSWORD='test123', EOF $MYSQL_CMD -e "start slave;" $MYSQL_CMD -e "show slave status\G" | egrep "IO_Running|SQL_Running" > $LOG_FILE mail -s "mysql slave result" aaa@abc.com < LOG_FILE
七、使用percona-monitoring-plugins插件监控mysql5.6
1、zabbix-agent端
1、zabbix-agent端(被监控的Mysql服务器) 1) 安装php环境 # yum install zabbix-agent php php-mysql 2) 安装percona插件 # rpm -ivh https://www.percona.com/downloads/percona-monitoring-plugins/percona-monitoring-plugins-1.1.7/binary/redhat/6/x86_64/percona-zabbix-templates-1.1.7-2.noarch.rpm 3) 配置参数 # mkdir -p /etc/zabbix/zabbix_agentd.d # cp /var/lib/zabbix/percona/templates/userparameter_percona_mysql.conf /etc/zabbix/zabbix_agentd.d/userparameter_percona_mysql.conf 4) 将模板include到配置文件中 # vim /etc/zabbix/zabbix_agentd.conf Include=/etc/zabbix/zabbix_agentd.d/ 5) 重启服务 service zabbix-agent restart 2、修改监控相关的脚本(被监控的Mysql服务器) 1) 添加监控用户 mysql> GRANT PROCESS,SUPER,REPLICATION CLIENT ON *.* TO zabbix@'localhost' IDENTIFIED BY 'zabbixpassword'; mysql> flush privileges; 2) 编辑监控的php配置文件 # vim /var/lib/zabbix/percona/scripts/ss_get_mysql_stats.php.cnf <?php $mysql_user = 'zabbix'; $mysql_pass = 'zabbixpassword'; 3) 编辑ss_get_mysql_stats.php文件 # vim /var/lib/zabbix/percona/scripts/ss_get_mysql_stats.php $mysql_user = 'zabbix'; $mysql_pass = 'zabbixpassword'; $mysql_port = 3306; $mysql_socket = "/tmp/mysql.sock"; 3、在zabbix-agent客户端测试(要能获取数据,否则无法获取监控数据) # /var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh nj # /var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh gw
2、zabbix-server web端操作
1) 导入监控模板
2) 修改日志权限
chown -R zabbix.zabbix /tmp/localhost-mysql_cacti_stats.txt
3) 添加客户端模板
4) 通过服务端验证是否生效,并查看图像
# zabbix_get -s 192.168.3.12 -k MySQL.file-reads # zabbix_get -s 192.168.3.12 -k MySQL.os-waits
3、监控mysql主从
1、在slave的节点,修改slave上的监控脚本 # vim /var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh RES=`HOME=~zabbix mysql -h192.168.3.13 -uzabbix -pzabbixpassword -S /tmp/mysql.sock -e 'SHOW SLAVE STATUS\G' | egrep '(Slave_IO_Running|Slave_SQL_Running):' | awk -F: '{print $2}' | tr '\n' ','` 2、监控主从同步 1) 监控主从同步状态 UserParameter=MySQL.running-slave,/usr/local/zabbix_agents_3.2.0/scripts/get_mysql_stats_wrapper.sh running-slave 2) 主从延迟多少秒 UserParameter=MySQL.slave-lag,/usr/local/zabbix_agents_3.2.0/scripts/get_mysql_stats_wrapper.sh jj 3) 要注意php的路径 CMD="/usr/local/php/bin/php -q $DIR/ss_get_mysql_stats.php --host $HOST --items gg" 4) 执行的时候发出警告,会报错:不支持的key # /usr/local/zabbix_agents_3.2.0/scripts/get_mysql_stats_wrapper.sh running-slave # zabbix_get -s 1.1.1.1 -p 10050 -k 'MySQL.running-slave' 5) 解决办法: RES=`HOME=/usr/local/zabbix_agents_3.2.0/scripts /usr/local/mysql/bin/mysql -S /tmp/mysql.sock -e 'SHOW SLAVE STATUS\G' | egrep '(Slave_IO_Running|Slave_SQL_Running):' | awk -F: '{print $2}' | tr '\n' ','` 语句中接入HOME目录,并且在该目录下创建.my.cnf文件,将账户密码写入这个文件,mysql在连接数据库的时候就会去读取这个文件,就绕过了不安全的提示 # cat /usr/local/zabbix_agents_3.2.0/scripts/.my.cnf [client] user=zabbix password=zabbix 3、测试报警 mysql> stop slave;
QQ:328864113 微信:wuhg2008