CentOS-7.5 配置 MySQL-5.7 普通双主复制

普通双主复制:非GTID类型的双主复制

一、实验环境

两台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服务

[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'

[root@CentOS ~]#

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

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服务

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

5)启动MySQL-5.7

[root@CentOS ~]#

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

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

[root@CentOS ~]#

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

说明:

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

下面的 /etc/my.cnf 配置文件截图是我后期重新调整过的,第一次做实验的时候,其实两台master分别是master_a和master_b ;但是下边截图的这个实验我将两台master命名为M1和M2,所以两次实验binlog日志前缀不一样,而且binlog日志存放路径也不一样

1)master_a 端配置

[root@CentOS ~]#

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

2)master_b 端配置

[root@CentOS-2 ~]#

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

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'

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'

四、重启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/

2)master_b 端执行

[root@CentOS-2 ~]#

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

六、获取MySQL临时登录密码

1)master_a 端获取:

[root@CentOS ~]#

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

2)master_b 端获取

七、使用安全配置向导设置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;

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 #导出一个全备

[root@CentOS ~]#

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

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

[root@CentOS ~]#

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

[root@CentOS ~]#

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

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

[root@CentOS-2 ~]#

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

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; #查看主库状态

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>

mysql>

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

Query OK, 0 rows affected (0.00 sec)

mysql>

mysql>

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

九、验证以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;

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

[root@CentOS-2 ~]#

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

mysql>

mysql> show databases;

mysql>

mysql> select * from t1.Student;

结论:对比 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'

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>

mysql>

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

Query OK, 0 rows affected (0.00 sec)

mysql>

mysql>

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

十一、验证以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>

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;

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

[root@CentOS ~]#

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

mysql>

mysql> show databases;

mysql>

mysql> select * from t2.Student;

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

十二、本实验结论

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,529评论 5 475
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,015评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,409评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,385评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,387评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,466评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,880评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,528评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,727评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,528评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,602评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,302评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,873评论 3 306
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,890评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,132评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,777评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,310评论 2 342

推荐阅读更多精彩内容