三十四、主从复制搭建

###一、主从复制介绍
全称MySQL Replication
1、主从复制基于binlog来实现的
2、主库发生新的操作,都会记录binlog
3、从库取得主库的binlog进行恢复
4、主从复制的过程是异步

###二、主从复制的前提条件
1、主从数据库时间要一致,网络通畅未被防火墙拦截
2、2个或以上的数据库实例
3、server_id要不同,以便区分不同的节点
4、主库需要开启二进制日志
5、主库需要建立专用的复制用户
6、人为告诉从库一些主库信息(ip、port、user、pass、二进制日志起点)
7、后添加的从库应该从主库进行备份恢复

###三、搭建主从复制
环境
主服务器:10.154.0.111
从服务器:10.154.0.112

1、检查主从服务器参数

mysql> select @@server_id; 
mysql> select @@log_bin; #主库开启
$ ping 10.154.0.112

2、主库建立复制用户
权限必须是replication slave

$ mysql -uroot -p \
-S /tmp/mysql.sock \
-e "grant replication slave on *.* to repl@'10.154.0.%' identified by '123'"; 
$ mysql -S /tmp/mysql.sock -e "select user,host from mysql.user";

3、主库备份恢复到从库

#主库备份,记得加--master-data=2 
$ mysqldump -uroot -p -S /tmp/mysql.sock -A \
--master-data=2 --single-transaction -R -E --triggers >/backup/full20210405.sql
$ scp /backup/full20210405.sql 10.154.0.112:/backup/full20210405.sql

#从库恢复
$ mysql -S /tmp/mysql.sock 
mysql> set sql_log_bin=0;
mysql> source /backup/full20210405.sql
mysql> set sql_log_bin=1;

4、告知从库关于主库的复制信息

#查看主库的备份,记下主库正在使用的binlog文件名跟起点信息
$ vim /backup/full20210405.sql
-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000041', MASTER_LOG_POS=752;
#以上语句等同于如下
$ grep "\-- CHANGE MASTER TO" /backup/full20210405.sql

#登录从库,查看帮助信息
mysql> help change master to
#改成如下
mysql> CHANGE MASTER TO 
MASTER_HOST='10.154.0.111', #主库的地址
MASTER_USER='repl',    #复制用户
MASTER_PASSWORD='123',   #复制密码
MASTER_PORT=3306,     #主库端口号
MASTER_LOG_FILE='mysql-bin.000041',  #主库正在使用的binlog
MASTER_LOG_POS=752,          #binlog起点
MASTER_CONNECT_RETRY=10; #重连次数

5、从库开启复制线程(IO跟SQL线程)

mysql> start slave;

6、检查主从复制状态

#在主库执行,会发现跟从库的position是一致的
mysql> show master status \G;

#在从库执行,检查有如下两行YES即可
mysql> show slave status \G
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
#以上语句等同于如下
$ mysql -S /tmp/mysql.sock -e "show slave status\G" | grep "Yes"
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

7、检查主从同步情况

#主库创建数据库
$ mysql -uroot -p -S /tmp/mysql.sock -e "create database tzwww;"

#检查从库是否同步
$ mysql -S /data/3308/mysql.sock -e "show databases;"

###四、如何判断主库跟从库

#有从库信息的为主库
mysql> show slave hosts;
+-----------+------+------+-----------+--------------------------------------+
| Server_id | Host | Port | Master_id | Slave_UUID                           |
+-----------+------+------+-----------+--------------------------------------+
|         7 |      | 3306 |         6 | 608b0578-8b03-11eb-a172-000c290d40be |
+-----------+------+------+-----------+--------------------------------------+
1 row in set (0.00 sec)

#有从库信息的为从库
mysql> show slave status \G;
...省略

学习来自:B站课程:MySQL主从复制介绍及搭建 P119

posted @ 2021-04-05 09:17  努力吧阿团  阅读(81)  评论(0编辑  收藏  举报