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 < [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 < [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