mysql 5.7 双主配置_CentOS-7.5 配置 MySQL-5.7 双主复制

本文档详细介绍了如何在两台 CentOS-7.5 虚拟机上配置 MySQL-5.7 的双主复制,包括环境准备、MySQL 服务安装、配置文件修改、重启服务、设置登录密码、配置主从复制、验证主从同步等步骤,最终实现数据双向同步。
摘要由CSDN通过智能技术生成

一、实验环境

两台CentOS-7.5虚拟机

虚机配置:1G内存、1核CPU、40G磁盘

MySQL版本:社区版MySQL-5.7

master_a:192.168.218.128

master_b:192.168.218.136

防火墙+selinux:均已关闭

双主:两台服务器互为主从

双主分两步实现:

1.配置以master_a为主,master_b为从的主从环境;

2.配置以master_b为主,master_a为从的主从环境

配置思路:

先实施Master->Slave的主主同步。主主是数据双向同步,主从是数据单向同步。

二、安装MySQL服务

说明:两台服务器同时执行以下命令,因为两台MySQL服务器要安装一模一样的环境

1)卸载系统自带的mariadb服务

[root@CentOS ~]#

[root@CentOS ~]# rpm -qa mariadb#先查看是否已安装mariadb服务

d9929a3700ebee250fb37545f660c9a8.png

[root@CentOS ~]# rpm -e --nodeps mariadb-libs-5.5.56-2.el7.x86_64 #卸载该程序

[root@CentOS ~]# rpm -qa mariadb #查看卸载mariadb是否成功

[root@CentOS ~]#

2)下载并安装mysql-5.7的安装源

yum localinstall https://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm #安装mysql-5.7的安装源

[root@CentOS ~]#

[root@CentOS ~]# ll /etc/yum.repos.d/ | grep 'mysql-community'

1abf58e6bff1057c90ce68a8603726c4.png

[root@CentOS ~]#

[root@CentOS ~]# yum list mysql-community-server #查看该MySQL源中可以安装的MySQL版本

4765326ac9811716aa64dced8a006254.png

3)删除Linux系统原来自带的 my.cnf 文件

删除Linux系统原来自带的 my.cnf 文件,如果my.cnf 文件存在的话

[root@CentOS ~]# rm -rf /etc/my.cnf #删除该文件

[root@CentOS ~]#

4)正式安装MySQL-5.7

[root@CentOS ~]#

[root@CentOS ~]# yum -y install mysql-community-server #安装MySQL服务

0d4029de4f11744e9d7b2ed1ede00a5f.png

[root@CentOS ~]# rpm -qa mysql-community-server

2a9dda2387030f4fc9a00e73281306ec.png

5)启动MySQL-5.7

[root@CentOS ~]#

[root@CentOS ~]# systemctl start mysqld.service

[root@CentOS ~]# systemctl enable mysqld.service

[root@CentOS ~]#

三、修改两台MySQL服务器的配置文件

说明:因为两个服务器都互为对方的主从,所以配置差不多,但是server-id是不一样的

1)master_a 端配置

[root@CentOS ~]#

[root@CentOS ~]# vim /etc/my.cnf #编辑修改master_a 的配置文件

ee25b603b6fda7be2abe6c7fc54956d5.png

2)master_b 端配置

[root@CentOS-2 ~]#

[root@CentOS-2 ~]# vim /etc/my.cnf #编辑修改master_b 的配置文件

ac41acc39e35cd51477b86b8218acdfc.png

3)创建用于存放binlog文件的目录

master_a 端创建:

[root@CentOS ~]#

[root@CentOS ~]# mkdir /var/lib/mysql/binary_log

[root@CentOS ~]#

[root@CentOS ~]# chown mysql:mysql /var/lib/mysql/binary_log #授权

[root@CentOS ~]#

[root@CentOS ~]# ll /var/lib/mysql | grep 'binary_log'

60bf97a6f570078e9c5ff3d60f374953.png

master_b 端创建:

[root@CentOS-2 ~]#

[root@CentOS-2 ~]# mkdir /var/lib/mysql/binary_log

[root@CentOS-2 ~]#

[root@CentOS-2 ~]# chown mysql:mysql /var/lib/mysql/binary_log #授权

[root@CentOS-2 ~]#

[root@CentOS-2 ~]# ll /var/lib/mysql | grep 'binary_log'

83cc33bd38c44d27e675467a6018f767.png

四、重启MySQL服务

说明:修改完配置文件后,重启MySQL服务使配置生效

1)master_a 端执行

[root@CentOS ~]#

[root@CentOS ~]# systemctl restart mysqld

[root@CentOS ~]#

2)master_b 端执行

[root@CentOS-2 ~]#

[root@CentOS-2 ~]# systemctl restart mysqld

[root@CentOS-2 ~]#

五、查看二进制文件是否生成

1)master_a 端执行

[root@CentOS ~]#

[root@CentOS ~]# ls /var/lib/mysql/binary_log/

bdcf98df501f54324abe5de9de3f23d5.png

2)master_b 端执行

[root@CentOS-2 ~]#

[root@CentOS-2 ~]# ls /var/lib/mysql/binary_log/

a8a11b0f631395052dd7d455b15c182d.png

六、获取MySQL临时登录密码

1)master_a 端获取:

[root@CentOS ~]#

[root@CentOS ~]# grep 'temporary' /var/log/mysqld.log

b5fe5101a4577989463107c3de7ed45e.png

2)master_b 端获取

e3c7d3705f52fcddc618268d720611b2.png

七、使用安全配置向导设置MySQL

说明:MySQL使用前的基本设置

注:两台MySQL服务器操作几乎一模一样,但是root密码可以设置的不一样

1)master_a 端设置

[root@CentOS ~]#

[root@CentOS ~]# mysql_secure_installation #安全配置向导

Securing the MySQL server deployment.

Enter password for user root: #输入上面获取的临时密码 ;76/.favFurg

The existing password for the user account root has expired. Please set a new password.

New password: #设置新root密码 Ctsi.2020

Re-enter new password: #再次输入新root密码 Ctsi.2020

The 'validate_password' plugin is installed on the server.

The subsequent steps will run with the existing configuration

of the plugin.

Using existing password for root.

Estimated strength of the password: 100 #密码强度为100

Change the password for root ? ((Press y|Y for Yes, any other key for No) : no #不再修改root密码了,上面已经改过了

... skipping.

By default, a MySQL installation has an anonymous user,

allowing anyone to log into MySQL without having to have

a user account created for them. This is intended only for

testing, and to make the installation go a bit smoother.

You should remove them before moving into a production

environment.

Remove anonymous users? (Press y|Y for Yes, any other key for No) : y

Success. #移除匿名用户

Normally, root should only be allowed to connect from

'localhost'. This ensures that someone cannot guess at

the root password from the network.

Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y

Success. #禁止root用户远程登录mysql服务器

By default, MySQL comes with a database named 'test' that

anyone can access. This is also intended only for testing,

and should be removed before moving into a production

environment.

Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y #删除测试数据库

Dropping test database...

Success.

Removing privileges on test database...

Success.

Reloading the privilege tables will ensure that all changes

made so far will take effect immediately.

Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y

Success. #刷新授权表

All done!

[root@CentOS ~]#

2)master_b 端设置

master_b 端安全配置向导设置和master_a 端设置一模一样,连root用户的密码都一样,都是 Ctsi.2020

具体设置过程省略……

八、先配置以master_a 为主,master_b 为从的主从复制模式

1)设置MySQL复制账号并做授权

master_a 端操作:

[root@CentOS ~]#

[root@CentOS ~]# mysql -uroot -p'Ctsi.2020'

mysql>

mysql> show databases;

e83e88164a5506ed6162b64dcb240c1c.png

mysql>

mysql> grant replication slave on . to repluser@192.168.218.136 identified by 'Mysql.2020'; #授权repluser账户可以通过从服务器192.168.218.136来登录主服务器并复制主服务器的所有库和所有表

Query OK, 0 rows affected, 1 warning (0.01 sec)

mysql>

mysql> flush privileges; #刷新授权表

Query OK, 0 rows affected (0.00 sec)

mysql>

2)master_a 主服务器端导出一个全备

[root@CentOS ~]#

[root@CentOS ~]# mysqldump -uroot -p'Ctsi.2020' --all-databases --single-transaction > /tmp/mysql_full-1.sql #导出一个全备

529490d0f402c46e1f2776c7f4ac5ce6.png

[root@CentOS ~]#

[root@CentOS ~]# ll /tmp/mysql_full-1.sql

2ac9af7ff9cf5859db6128d08c40d43a.png

3)将mysql主服务器的第一次全备拷贝到从服务器

[root@CentOS ~]#

[root@CentOS ~]# scp /tmp/mysql_full-1.sql root@192.168.218.136:/tmp/

f461e5a319f309cdade5e39b7a9fae9e.png

[root@CentOS ~]#

[root@CentOS ~]# ssh root@192.168.218.136 #远程登录到从服务器端查看全备是否复制成功

a8c145f3d1a3f99bf87008a80d4d621c.png

[root@CentOS-2 ~]# ll /tmp/mysql_full-1.sql

f980c74b80d06592c7ffcdb8798b1e9b.png

[root@CentOS-2 ~]#

[root@CentOS-2 ~]# logout #退出从服务器远程登录

f14a06d754e6634f34f230b41c82ae5b.png

4)从服务器端导入数据库全备

master_b 端操作:

[root@CentOS-2 ~]#

[root@CentOS-2 ~]# mysql -uroot -p'Ctsi.2020' < /tmp/mysql_full-1.sql #导入全备,使得主从两端状态处于一致

此时,master端和slave端数据处于一致状态

5)查看主服务器端数据库的状态并记住

说明:这个状态非常重要,后面要用到,所以要记住

master_a 端执行:

[root@CentOS ~]#

[root@CentOS ~]# mysql -uroot -p'Ctsi.2020' #登录主服务器端数据库

mysql>

mysql> show master status; #查看主库状态

6b222c6815935382ffe7fa705834b52f.png

6)设置主从复制

master_b 端执行:

[root@CentOS-2 ~]#

[root@CentOS-2 ~]# mysql -uroot -p'Ctsi.2020' #登录从服务器端数据库

mysql>

mysql> change master to

-> master_host='192.168.218.128',

-> master_user='repluser',

-> master_password='Mysql.2020',

-> master_log_file='master_a-binlog.000001',

-> master_log_pos=1163;

Query OK, 0 rows affected, 2 warnings (0.13 sec)

mysql>

mysql>

52a6fb3fe442690040b13618e6067b1f.png

mysql>

mysql> start slave; #启动slave同步进程

Query OK, 0 rows affected (0.00 sec)

mysql>

mysql>

mysql> show slave status\G #查看slave状态

5a921394d47402591858f7b7ed006e70.png

九、验证以master_a 为主,master_b为从的主从复制

方法:在master_a 端插入数据,在master_b 端验证是否同步过去

1)在master端创建数据库并插入数据

[root@CentOS ~]#

[root@CentOS ~]# mysql -uroot -p'Ctsi.2020'

mysql>

mysql> create database t1;

Query OK, 1 row affected (0.00 sec)

mysql>

mysql> use t1;

Database changed

mysql>

mysql> create table Student(

-> Sid varchar(10),

-> Sname nvarchar(10),

-> Sage datetime,

-> Ssex nvarchar(10)

-> );

Query OK, 0 rows affected (0.15 sec)

mysql>

mysql>

mysql> insert into Student values('01','张磊','1995-02-08','男');

Query OK, 1 row affected (0.00 sec)

mysql>

mysql> insert into Student values('02','李华','1995-06-11','男');

Query OK, 1 row affected (0.01 sec)

mysql>

mysql> select * from Student;

0740980cafe0dd3470f9847be46e1a4b.png

2)去slave端查看是否存在master中插入的数据

[root@CentOS-2 ~]#

[root@CentOS-2 ~]# mysql -uroot -p'Ctsi.2020' #登录master_b 端数据库

mysql>

mysql> show databases;

bfdc01a8f39eeeea5779eb65e1eae576.png

mysql>

mysql> select * from t1.Student;

f64f60a98e56d8ceb27bfada87b7be87.png

结论:对比 master_a 和 master_b 发现,两端数据一致,主从同步成功

十、再配置以master_b 为主,master_a 为从的主从复制模式

理解:在原来的CentOS主节点上创建新的用户(※这点很重要,因为之前已经是主从配置,所以在master_a节点上创建会自动同步至master_b上,如果在master_b上创建用户,则可能会导致两节点数据不一致情况发生)

在master_a端进行操作:

1)设置MySQL复制账号并做授权

在master_a端执行:

[root@CentOS ~]#

[root@CentOS ~]# mysql -uroot -p'Ctsi.2020'

mysql>

mysql> grant replication slave on . to repluser@192.168.218.128 identified by 'Mysql.2020';

Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql>

mysql> flush privileges;

Query OK, 0 rows affected (0.00 sec)

mysql>

2)查看主服务器端数据库的状态并记住

说明:这个状态非常重要,后面要用到,所以要记住

在master_b 端执行:

[root@CentOS-2 ~]#

[root@CentOS-2 ~]# mysql -uroot -p'Ctsi.2020'

de52e79acf8b32e3229ff22157d979c2.png

3)设置主从复制

在master_a端执行:

[root@CentOS ~]#

[root@CentOS ~]# mysql -uroot -p'Ctsi.2020'

mysql>

mysql> change master to

-> master_host='192.168.218.136',

-> master_user='repluser',

-> master_password='Mysql.2020',

-> master_log_file='master_b-binlog.000001',

-> master_log_pos=831197;

Query OK, 0 rows affected, 2 warnings (0.13 sec)

mysql>

5d24410139bac03e169ed9a38ac34363.png

mysql>

mysql> start slave; #启动slave同步进程

Query OK, 0 rows affected (0.00 sec)

mysql>

mysql>

mysql> show slave status\G #查看slave状态

a3118bd349d31ff75d0d02d2c3281a30.png

十一、验证以master_b 为主,master_a 为从的主从复制

方法:在master_b 端插入数据,在master_a 端验证是否同步过去

1)在master端创建数据库并插入数据

[root@CentOS-2 ~]#

[root@CentOS-2 ~]# mysql -uroot -p'Ctsi.2020'

mysql>

mysql> create database t2; #创建数据库t2

Query OK, 1 row affected (0.00 sec)

mysql>

mysql> use t2;

Database changed

mysql>

mysql> create table Student(

-> Sid varchar(10),

-> Sname nvarchar(10),

-> Sage datetime,

-> Ssex nvarchar(10)

-> );

Query OK, 0 rows affected (0.11 sec)

mysql>

27dcb2a5064bd7f9cc963cc9e93b79e4.png

mysql>

mysql> insert into Student values('03','王青','1996-01-06','女'); #插入数据

Query OK, 1 row affected (0.01 sec)

mysql>

mysql> insert into Student values('04','三毛','1980-09-25','女');

Query OK, 1 row affected (0.10 sec)

mysql>

mysql> select * from Student;

c225fecddb0d4030a13a2422fa0e0127.png

2)去slave端查看是否存在master中插入的数据

[root@CentOS ~]#

[root@CentOS ~]# mysql -uroot -p'Ctsi.2020'

mysql>

mysql> show databases;

5e365ec9c3f32a15ea0d45c8c5834477.png

mysql>

mysql> select * from t2.Student;

3455ad0108c6bd7526afd1ade6b5ff3f.png

结论:对比 master_a 和 master_b 发现,两端数据一致,主从同步成功

十二、本实验结论

经过两轮验证得出:MySQL双主复制配置成功

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值