ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

MySQL集群主从复制

2021-06-20 14:02:42  阅读:188  来源: 互联网

标签:master1 主从复制 master2 +------+ MySQL 集群 mysql master root


MySQL集群主从复制

概念:
1. 在主库上把数据更改(DDL DML DCL)记录到二进制日志(Binary Log)中。

2. 备库I/O线程将主库上的日志复制到自己的中继日志(Relay Log)中。

3. 备库SQL线程读取中继日志中的事件,将其重放到备库数据库之上。


一、一主一从(M-S)

1、环境准备

1.全新机器安装mysql57-分别安装

2.能够互相通信

master1(主节点):192.168.88.133

master2(从节点):192.168.88.134

3.配置域名解析(所有的机器都需要做)

[root@master1 ~]# vim /etc/hosts
192.168.88.133 master1
192.168.88.134 master2

2、主master1配置

1.准备数据1(验证主从同步使用)

mysql> create database master1db;
mysql> create table master1db.master1tab(name char(50));
mysql> insert into master1db.master1tab values (1111);
mysql> insert into master1db.master1tab values (2222);
mysql> select * from master1db.master1tab;
+------+
| name |
+------+
| 111  |
| 222  |
+------+

2 rows in set (0.01 sec)

2.开启二进制日志

[root@master1 ~]# vim /etc/my.cnf
[mysqld]
log_bin
server-id=1

3.创建复制用户

mysql> grant replication slave, replication client on *.* to 'rep'@'10.18.41.%' identified by 'Yuanwei@123';

4.备份master数据库的数据

[root@master1 ~] mysqldump -p'Yuanwei@123' --all-databases --single-transaction --master-data=2 --flush-logs > `date +%F`-mysql-allyw.sql

5.准备数据2(验证主从同步使用)

mysql> insert into master1db.master1tab values (333);
mysql> insert into master1db.master1tab values (444);
mysql> select * from master1db.master1tab;
+------+
| name |
+------+
| 111  |
| 222  |
| 333  |
| 444  |
+------+

4 rows in set (0.01 sec)

3、master2的配置

1.部署数据库应用,做域名解析

2.测试rep用户是否可用,预防账户问题。

[root@master2 ~]# mysql -h master1 -urep -p'Yuanwei@123'
能进入数据库即可

3.启动服务器序号(不用在从设备上开启二进制日志,没有人向master2请求日志。)

[root@master2 ~]# vim /etc/my.cnf
server-id=2
[root@master2 ~]# systemctl restart mysqld

4.手动同步数据

mysql>  set sql_log_bin=0;
mysql>  source /tmp/2021-06-19-mysql-allyw.sql
mysql> select * from master1db.master1tab;
+------+
| name |
+------+
| 111  |
| 222  |
+------+

2 rows in set (0.01 sec)

5.设置主服务器(重点命令)

mysql> change master to
    -> master_host='master1',     //设置同步的主服务器
    -> master_user='rep',         //同步的主服务器的用户名
    -> master_password='QianFeng@123',  同步的主服务器的用户密码
    -> master_log_file='localhost-bin.000002',   //设置数据同步的文件
    -> master_log_pos=154;      //设置从什么地方开始同步数据

6.启动从设备

mysql> start slave;

7.查看启动状态(IO-YES/SQL-YES)

mysql> show slave status\G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: master1
                  Master_User: rep
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: master1-bin.000002
          Read_Master_Log_Pos: 1210
               Relay_Log_File: master2-relay-bin.000002
                Relay_Log_Pos: 1378
        Relay_Master_Log_File: master1-bin.000002
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
后面还有一些相关的信息,此处省略。

8.进入数据库查看是否实现数据同步

master2:
mysql> select * from master1db.master1tab;
+------+
| name |
+------+
| 111  |
| 222  |
| 333  |
| 444  |
+------+

4 rows in set (0.00 sec)
************************************************************************************************
master1:
mysql> insert into master1db.master1tab values (555);
mysql> insert into master1db.master1tab values (666);
master2:
mysql> select * from master1db.master1tab;
+------+
| name |
+------+
| 111  |
| 222  |
| 333  |
| 444  |
| 555  |
| 666  |
+------+

6 rows in set (0.00 sec)

MySQL集群主从复制(一主一从)搭建完成。

另一种方式配置一主一从的方式(自动确定二进制日志位置)

与上一个实验需求基同。master1 作为主mysql,master2 作为从mysql。

不同之处,使用了
“gtid_mode=ON
enforce_gtid_consiste=1”
该属性自动记录posion位置,不需要手动指定。

1、请重置master2数据库

[root@master2 ~]# systemctl stop mysqld
[root@master2 ~]# rm -rf /var/lib/mysql/*
[root@master2 ~]# systemctl start mysqld
[root@master2 ~]# grep password /var/log/mysqld.log
[root@master2 ~]# mysqladmin -p'VsudOt+g%5Nw' password 'Yuanwei@123'

2、master1启动二进制日志,服务器ID,GTID

[root@master2 ~]# vim /etc/my.cnf
log_bin
server-id=1
gtid_mode=ON
enforce_gtid_consistency=1
[root@master2 ~]# systemctl restart mysqld

3、master2

mysql> set sql_log_bin=0;
mysql> source /tmp/2021-06-19-mysql-allyw.sql
mysql> select * from master1db.master1tab;

4、设置主服务器

mysql> change master to
master_host='master1',
master_user='rep',
master_password='Yuanwei@123',
master_auto_position=1;    //开启自动记录position位置的功能

5、验证方法跟前面的方式一样

二、双主双从(MM-SS)

前面的实验,主服务器单节点设置。假如主服务器故障会影响全局的写入事件,故要设置双主。
目前已经设置master1为master2的主服务器,只需设置master2为master1的主服务器即可。

环境准备,做好域名解析。

192.168.88.133 master1
192.168.88.134 master2
192.168.88.135 slave1
192.168.88.136 slave2

1、设置master2为master1的主服务器

1.在master2 上进行授权

mysql> grant replication slave, replication  client on *.* to 'rep'@'192.168.88.%'  identified by 'Yuanwei@123';
mysql> flush privileges;

2.master1

mysql> change master to master_host='master2',master_user='rep',master_password='Yuanwei@123',master_auto_position=1;
mysql> start slave;
mysql> show slave status\G;

3.测试

master1上插入数据,在master2上观察。

master2上插入数据,在master1上观察。

双方同步成功,双主设置完成。

2、同步现有数据库

master1

[root@master1 ~]# mysqldump -p'Yuanwei@123' --all-databases --single-transaction --master-data=2  --flush-logs > `date +%F`-mmss-all.sql
[root@master1 ~]# scp -r 2020-1-1-mmss-all.sql slave1:/tmp
[root@master1 ~]# scp -r 2020-1-1-mmss-all.sql slave2:/tmp

slave1

[root@slave1 ~]# mysql -p'Yuanwei@123' < /tmp/2020-1-1-mmss-all.sql

slave2

[root@slave2 ~]# mysql -p'Yuanwei@123' < /tmp/2020-1-1-mmss-all.sql

3、启动从服务器ID,gtid

slave1

[root@slave1 ~]# vim /etc/my.cnf
server-id=3
gtid_mode=ON
enforce_gtid_consistency=1
master-info-repository=TABLE
relay-log-info-repository=TABLE
[root@slave1 ~]# systemctl restart mysqld

slave2

[root@slave1 ~]# vim /etc/my.cnf
server-id=4
gtid_mode=ON
enforce_gtid_consistency=1
master-info-repository=TABLE
relay-log-info-repository=TABLE
[root@slave1 ~]# systemctl restart mysqld

4、设置主服务器

slave1:将master1和master2设置为主服务器(slave2操作如同slave1)

mysql> change master to
    -> master_host='master1',
    -> master_user='rep',
    -> master_password='Yuanwei@123',
    -> master_auto_position=1 for channel 'master1';

mysql> change master to
    -> master_host='master2',
    -> master_user='rep',
    -> master_password='Yuanwei@123',
    -> master_auto_position=1 for channel 'master2';

mysql> start slave;
mysql> show slave status\G;

5、测试

master1 插入数据

master2插入数据

slave1查看

slave2查看

6、做到这里,MySQL集群的主从复制就完成了。


各位小伙伴们,今天的学习就分享到这里咯,你学废了吗?欢迎大家留言评论呦~

Alt


标签:master1,主从复制,master2,+------+,MySQL,集群,mysql,master,root
来源: https://blog.csdn.net/qq_45939993/article/details/118069121

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有