一、安装部署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;

学习MySql(一)的更多相关文章

  1. 烂泥:学习mysql数据库主从同步复制原理

    本文由秀依林枫提供友情赞助,首发于烂泥行天下. 说明本篇文章部分转载自互联网. MySQL的Replication(英文为复制)是一个多MySQL数据库做主从同步的方案,特点是异步复制,广泛用在各种对 ...

  2. 从零开始学习Mysql的学习记录

    2015/06/18 16:23更新,由于QQ邮件的图片链接失效了,请在云笔记链接查看 http://note.youdao.com/share/?id=f0b2ed30a3fc8e57c381e3d ...

  3. 学习MySQL(上)

    具体实例 1.PHP 服务器组件 对于初学者建议使用集成的服务器组件,它已经包含了 PHP.Apache.Mysql 等服务,免去了开发人员将时间花费在繁琐的配置环境过程. Window 系统可以使用 ...

  4. 学习MySQL(下)

    具体实例 22.MySQL ALTER命令 当我们需要修改数据表名或者修改数据表字段时,就需要使用到MySQL ALTER命令. 1.如果需要修改数据表的名称,可以在 ALTER TABLE 语句中使 ...

  5. 学习MySQL我们应该知道哪些东西?

    随笔:小编由于年前一直在找工作,而年后找到工作后又一直在忙工作,所以也很少有时间给大家写点什么,总的来说呢,回顾一下之前面试的几次经历,也曾小小的总结了一下自己的不足,发现自己虽然一直在原有的公司(外 ...

  6. 有什么学习MySQL的好教程吗?

      有什么学习Mysql的好教程吗? 文档是最好的,现整理如下: [mysql教程]MySQL 教程 [MySQL教程]MySQL 安装 [MySQL教程]MySQL 管理 [MySQL教程]MySQ ...

  7. 学习 MySQL中导入 导出CSV

    学习 MySQL中导入 导出CSV http://blog.csdn.net/sara_yhl/article/details/6850107    速度是很快的 导出 select * from t ...

  8. 重新学习MySQL数据库10:MySQL里的那些日志们

    重新学习MySQL数据库10:MySQL里的那些日志们 同大多数关系型数据库一样,日志文件是MySQL数据库的重要组成部分.MySQL有几种不同的日志文件,通常包括错误日志文件,二进制日志,通用日志, ...

  9. 重新学习MySQL数据库9:Innodb中的事务隔离级别和锁的关系

    重新学习MySQL数据库9:Innodb中的事务隔离级别和锁的关系 Innodb中的事务隔离级别和锁的关系 前言: 我们都知道事务的几种性质,数据库为了维护这些性质,尤其是一致性和隔离性,一般使用加锁 ...

  10. 重新学习MySQL数据库7:详解MyIsam与InnoDB引擎的锁实现

    重新学习Mysql数据库7:详解MyIsam与InnoDB引擎的锁实现 说到锁机制之前,先来看看Mysql的存储引擎,毕竟不同的引擎的锁机制也随着不同. 三类常见引擎: MyIsam :不支持事务,不 ...

随机推荐

  1. Java课程设计---修改学生基本信息

    1.修改窗体 2.在StudentDao中增加修改学生信息的方法 /** * 修改的方法 * * @param student * @return * @throws SQLException */ ...

  2. Spring Cloud Gateway 远程代码执行漏洞(CVE-2022-22947)

    参考: https://y4er.com/post/cve-2022-22947-springcloud-gateway-spel-rce-echo-responsehttps://cloud.spr ...

  3. JVM上篇:类加载子系统

    JVM类加载 目录 JVM类加载 1.内存结构概述 2.类加载子系统概述 3.类的加载过程 2.1加载 2.2Linking 2.2.1验证(Verify) 2.2.2准备(Prepare) 2.2. ...

  4. json web token JWT实现TP5创建和验证

    根据博客进行jwt初始化配置 https://blog.csdn.net/weixin_43389208/article/details/117442266?spm=1001.2014.3001.55 ...

  5. Linux服务器 I/O 原理和流程

    计算机I/OI/O在计算机中指Input/Output,IOPS (Input/Output Per Second)即每秒的输入输出量(或读写次数),是衡量磁盘性能的主要指标之一.IOPS是指单位时间 ...

  6. 《手把手教你》系列基础篇(七十七)-java+ selenium自动化测试-框架设计基础-TestNG依赖测试- 上篇(详解教程)

    1.简介 今天主要是讲解和分享:TestNG中一个类中有多个测试方法的时候,多个测试方法的执行顺序或者依赖关系的问题.如果不用dependsOnMethods,testNG会自动根据@Test方法名称 ...

  7. Net中委托之一

    1.委托的用法 委托是一种特殊的类型 a. 委托可以类外定义,也可以在类里面定义 b. 委托的操作步骤 1.委托的声明 2.委托的实例化 3.委托的调用 2.委托实例 amespace MyDeleg ...

  8. Spring IOC---Bug处理

    1. org.junit.platform.commons.JUnitException: TestEngine with ID 'junit jupiter' failed to discover ...

  9. Mybaties——动态sql

    动态 SQL 是 MyBatis 的强大特性之一.如果你使用过 JDBC 或其它类似的框架,你应该能理解根据不同条件拼接 SQL 语句有多痛苦,例如拼接时要确保不能忘记添加必要的空格,还要注意去掉列表 ...

  10. 三大主流软件负载均衡器对比(LVS & Nginx & Haproxy)

    LVS:1.抗负载能力强.抗负载能力强.性能高,能达到F5硬件的60%:对内存和cpu资源消耗比较低2.工作在网络4层,通过vrrp协议转发(仅作分发之用),具体的流量由linux内核处理,因此没有流 ...