2022-01-14 day71 MySQL主从复制

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

你可能感兴趣的:(2022-01-14 day71 MySQL主从复制)