https://www.processon.com/view/link/61e11f22f346fb06cb98c0d1
第1章 MySQL主从复制
1.主从复制功能简单介绍
主库通过网络传输binlog的数据给从库,从库接收同步主库数据
2.主从复制应用场景
主库如果宕机了,从库可以快速切换替代主库
代码读写分离,写入操作在主库上,读取操作在从库上
备份可以再从库上操作
分析数据可以再从库上进行
第2章 MySQL主从复制部署
1.梳理思路
第一步:从库安装数据库
第二步:主库全备数据并发送给从库
第三步:从库导入主库数据
第四步:找出主库全备时刻的位置点
第五步:主库创建复制用的账号密码
第六步:从库配置同步命令
第七步:从库开启复制功能
第八步:从库检查同步是否完成
2.第一步:从库安装数据库
cd /opt/
scp 10.0.0.51:/opt/mysql-5.7.28-linux-glibc2.12-x86_64.tar.gz .
tar zxf mysql-5.7.28-linux-glibc2.12-x86_64.tar.gz -C /opt/
mv mysql-5.7.28-linux-glibc2.12-x86_64 mysql-5.7.28
查看解压后目录大小
ln -s mysql-5.7.28 mysql
配置环境变量
echo 'PATH=$PATH:/opt/mysql/bin' >> /etc/profile
source /etc/profile
mysql -V
rpm -qa|grep mariadb
yum remove mariadb-libs -y
rm -rf /etc/my.cnf
yum install -y libaio-devel
mkdir /data -p
useradd -s /sbin/nologin -M mysql
chown -R mysql.mysql /data/
chown -R mysql.mysql /opt/mysql*
初始化数据库
mysqld --initialize-insecure --user=mysql --basedir=/opt/mysql --datadir=/data/mysql_3306/
cat> /etc/my.cnf <<EOF
[mysqld]
port=3306
user=mysql
basedir=/opt/mysql
datadir=/data/mysql_3306
server_id=52
EOF
设置systemd启动
cp /opt/mysql/support-files/mysql.server /etc/init.d/mysqld
chkconfig --add mysqld
systemctl start mysqld
netstat -lntup|grep 3306
设置root账号密码
mysqladmin password 123
#统一主库的环境
mkdir /data/binlog/ -p
chown -R mysql:mysql /data/
cat> /etc/my.cnf <<EOF
[mysqld]
port=3306
user=mysql
basedir=/opt/mysql
datadir=/data/mysql_3306
server_id=51
log_bin=/data/binlog/mysql-bin
EOF
systemctl restart mysqld
3.第二步:主库全备数据并发送给从库
mysqldump -uroot -p123 -A --master-data=2 --single-transaction > /tmp/full.sql
scp /tmp/full.sql 10.0.0.52:/tmp/
4.第三步:从库导入主库数据
mysql -uroot -p123 < /tmp/full.sql
5.第四步:找出主库全备时刻的位置点
[root@db-51 ~]# sed -n '22p' /tmp/full.sql
-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=154;
6.第五步:主库创建复制用的账号密码
grant replication slave on *.* to repl@'10.0.0.%' identified by '123';
select user,host from mysql.user;
repl远程登录测试
查看主从数据库数据是否一致
7.第六步:从库配置同步命令
mysql -uroot -p123
CHANGE MASTER TO
MASTER_HOST='10.0.0.51',
MASTER_USER='repl',
MASTER_PASSWORD='123',
MASTER_PORT=3306,
MASTER_LOG_FILE='mysql-bin.000002',
MASTER_LOG_POS=154,
MASTER_CONNECT_RETRY=10;
8.第七步:从库开启复制功能
start slave;
9.第八步:从库检查同步是否完成
show slave status\G
MySQL主从复制示意图
10.报错总结:
故障1:IO 显示NO
Slave_IO_Running: No
Slave_SQL_Running: Yes
报错内容:
Last_IO_Error: Fatal error: The slave I/O thread stops because master and slave have equal MySQL server ids; these ids must be different for replication to work (or the --replicate-same-server-id option must be used on slave but this does not always make sense; please check the manual before using it).
原因:
The slave I/O thread stops because master and slave have equal MySQL server ids
从库和主库设置了相同的server_id
故障2:SQL NO
Slave_IO_Running: Yes
Slave_SQL_Running: No
原因:
主库上执行的SQL语句在从库上执行失败了
解决:
让这条SQL语句在从库上可以执行成功
解决完之后记得重启复制功能
stop slave;
start slave;
第3章 主从复制原理
1.主从复制涉及到的文件及线程
主库涉及到的文件: binlog
从库涉及到的文件: master.info db-52-relay-bin-00000x relay-log.info
master.info
主库涉及到的线程: Binlog Dump
从库涉及到的线程: Slave_IO Slave_SQL
2.主从复制原理
第一步: 从库读取master.info里的信息连接主库
master.info里包含了主库的IP,端口,账号,密码,请求的binlog文件,post位置点
第二步: 主库验证从库的连接信息Binlog Dump一直监控着binlog文件并截取从库需要的SQL语句
第三步: 主库发送binlog数据
第四步: IO线程从库接收主库的数据,并存储到自己的relay-bin日志里
第五步: IO线程从库存储完之后会更新自己的master.info信息
第六步: SQL线程查看自己的relay-log.info文件,读取自己上一次执行过的位置
第七步: SQL线程回放relay-bin日志里SQL语句
第八步: SQL线程将最新执行过的位置点更新到relay-log.info文件里
第4章 主从复制监控
1.主库状态
mysql -uroot -p123 -e 'show processlist;'|grep 'Binlog Dump'
2.从库状态
查看信息:
mysql -uroot -p123 -e 'show slave status\G'
主库连接信息、binlog位置信息:
Master_Host: 10.0.0.51
Master_User: repl
Master_Port: 3306
Connect_Retry: 10
Master_Log_File: mysql-bin.000003
Read_Master_Log_Pos: 154
从库中relay-log的回放信息:
Relay_Log_File: db-52-relay-bin.000006
Relay_Log_Pos: 367
Relay_Master_Log_File: mysql-bin.000003
Exec_Master_Log_Pos: 154
线程监控信息:主要用来排查主从故障-重点监控:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
落后于主库的秒数-重点监控:
Seconds_Behind_Master: 0
过滤复制相关信息:
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
延时从库状态信息:
SQL_Remaining_Delay: NULL
GTID复制信息:
Retrieved_Gtid_Set:
Executed_Gtid_Set:
Auto_Position: 0
第5章 主从复制故障
1.IO故障
故障原因:
账号,密码,端口,IP写错
2.SQL故障
主库和从库数据冲突:
建议:
以主库的数据为主,手动修复从库冲突的数据
如果冲突的数据过多,干脆直接重做从库
不建议:
跳过此条错误
stop slave;
set global sql_slave_skip_counter = 1;
start slave;
更不推荐:
直接按错误代码跳过
vi /etc/my.cnf
slave-skip-errors = 1032,1062,1007