三十四、主从复制搭建
###一、主从复制介绍
全称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;
...省略
今天的学习是为了以后的工作更加的轻松!