MySQL8.0.26传统主从复制(保姆式文档)

第13章 MySQL主从复制-上(老男孩Linux云计算MySQL)

1. 介绍
需要2台及以上节点,通过binlog回放实现数据复制同步。

搭建步骤:
https://www.processon.com/mindmap/60813d46e401fd53c7b675cf

2. 传统复制 (Classic)
2.1 复制前提(搭建过程)

a. 准备2个以上MySQL实例
db01 10.0.0.51(内网)
db02 10.0.0.52


b. 主库开启binlog日志。
mysql> select @@log_bin;
mysql> select @@log_bin_basename;

c.创建复制用户并授权
mysql> create user repl@'10.0.0.%' identified with mysql_native_password by '123';
mysql> grant replication slave on *.* to repl@'10.0.0.%';

d.确保主从环境server_id和server_uuid不同
1)查看
mysql> select @@server_id;
mysql> select @@server_uuid;

2)修改从库server_id
vim /etc/my.cnf
server_id=2

3)修改从库server_uuid
rm -f /data/3306/data/auto.cnf
/etc/init.d/mysqld restart

4)确保两边都reset master;让环境干净,减少干扰
特别是防止GTID影响

e. 同步的数据库版本最好一致。

f. 从库的数据同步(mysqldump xtrabackup clone plugin 停库CP)。
========================================================
1)主数据库锁表
mysql> flush table with read lock; ##窗口不能关.
mysql> show master status;
+---------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+---------------+----------+--------------+------------------+-------------------+
| binlog.000001 | 156 | | | |
+---------------+----------+--------------+------------------+-------------------+
2)备份主库
mysqldump -uroot -poldboy123 -A --master-data=2 --single-transaction -R -E --triggers --max_allowed_packet=64M|gzip>/data/backup/master_`date +%F`.sql.gz

3)主数据库解锁
mysql> unlock tables;

4)拷贝到从库
scp /data/backup/master_`date +%F`.sql.gz 10.0.0.52:/tmp

5)从库恢复数据
gzip -d /tmp/master_2021-12-19.sql.gz
mysql -uroot -poldboy123</tmp/master_2021-12-19.sql ##如果有错,删除/tmp/master_2021-12-19.sql第一行.

6)从库指定连接参数以及位置点
CHANGE MASTER TO
MASTER_HOST='10.0.0.51',
MASTER_USER='repl',
MASTER_PASSWORD='123',
MASTER_PORT=3306,
MASTER_LOG_FILE='binlog.000001',
MASTER_LOG_POS=156,
MASTER_CONNECT_RETRY=10;
###5.7以前以前语句,写到master.info文件里.5.7及以后写到表里

帮助:
help CHANGE MASTER TO

7)启动专用复制线程 start slave;
mysql> start slave;
mysql> show slave status \G
成功标志:两个Yes
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

Or from MySQL 8.0.22:
mysql> STOP REPLICA;
mysql> SHOW REPLICA STATUS\G


2.2 传统主从复制原理

1.5.6两种复制方式
2.主库开启binlog日志,从库获取binlog日志,在数据库里异步回放来实现的.
3.复制的时候有3个线程
2.2.1 涉及到的线程
# 主库线程
binlog dump线程,投递binlog。
作用:
a. 与从库进行交互
b. 监控binlog的变化
c. 投递binlog给从库
监控:
show processlist;
##Binlog Dump | 1647 | Source has sent all binlog to replica; waiting for more updates

# 从库线程
IO线程 :
a. 连接主库
b. 和主库的Dump THREAD交互
c. 接收和存储主库的binlog日志 ,存储到relaylog(中继日志)中

SQL线程
a. 回放relaylog中的日志到数据库。
b.记录回放的位置到relay-info.log中

监控:
show slave status \G


2.2.2 涉及到的文件
# 主库:
binlog:二进制日志。

# 从库:
relaylog :中继日志,从库用来临时存储接收到的binlog文件。
master.info: 连接主库的信息(ip、port、user、password、已经获取的binlog位置点)
5.7以上在表中,5.7以前是磁盘文件。
relay-log.info:存储SQL线程回放过的日志信息。


2.2.3 画图说明主从复制原理 ******

 

 

 

构建传统主从复制,mysqldump数据导入[从库]问题:

[root@db01 ~]# mysqldump --defaults-file=/etc/my.cnf -uroot -poldboy123 --master-data=2 --single-transaction -A >oldboy.sql
mysqldump: [Warning] Using a password on the command line interface can be insecure.
Warning: A partial dump from a server that has GTIDs will by default include the GTIDs of all transactions, even those that changed suppressed parts of the database. If you don't want to restore GTIDs, pass --set-gtid-purged=OFF. To make a complete dump, pass --all-databases --triggers --routines --events.


--set-gtid-purged=off
Warning: A partial dump from a server that has GTIDs will by default include the GTIDs of all transactions, even those that changed suppressed parts of the database. If you don't want to restore GTIDs, pass --set-gtid-purged=OFF. To make a complete dump, pass --all-databases --triggers --routines --events.


--master-data丢弃了,替代参数--source-data=2
mysqldump --defaults-file=/etc/my.cnf -uroot -poldboy123 --source-data=2 --single-transaction --set-gtid-purged=off -A >all1.sql

###WARNING: --master-data is deprecated and will be removed in a future version. Use --source-data instead.


修改后的;
mysqldump --defaults-file=/etc/my.cnf -uroot -poldboy123 --source-data=2 --single-transaction --set-gtid-purged=off -A >oldboy.sql

从库导入:
[root@db02 ~]# mysql -uroot -poldboy123 <oldboy.sql
mysql: [Warning] Using a password on the command line interface can be insecure.

使用GTID复制的时候,使用mysqldump备份数据不要加--set-gtid-purged=off,或显示加--set-gtid-purged=on

posted @ 2021-12-24 17:42  老男孩老师  阅读(826)  评论(1编辑  收藏  举报