实现Centos 7.9 安装MySQL 集群 主从同步

MySQL并发链接最大支持16384连接数,一旦超过,数据库就会有宕机的风险;单台MySQL数据库一旦发生故障,就会造成数据库宕机,数据丢失。所以搭建集群主从同步非常有必要。

MySQL主从同步数据是利用二进制日志binlog实现的。二进制文件记录了数据库执行的DDL语句操作 (update、delete、insert)。

主从同步的基本原理:

1. 基于语句的复制(statement) 基于语句的复制(也称为逻辑复制)主要是指在主数据库上执行的SQL语句,在从数据库上会重复执行 一遍。MySQL默认采用的就是这种复制,效率比较高。

2. 基于行的复制(row) 指将主数据库中更新处理后的数据复制到从数据库,而不是执行一遍语句。从MySQL 5.1的版本才被支 持。

3. 混合类型的复制(mixed) 默认采用语句复制,当发现语句不能进行精准复制数据时(例如语句中含有uuid()、rand()等函数时), 会采用基于行的复制。

MySQL主从复制的优势:

1.主数据库出现问题,可以快速切换到从库提供服务;

2.从库上执行查询操作,在主库上执行更新操作,实现读写分离,降低主库的访问压力;

3.从库上执行数据备份,避免备份期间影响主库的服务;

简介

搭建主从同步的步骤:

注:在安装MySQL之前做好基础环境配置:

关闭防火墙

修改主机名

设置IP联网

关闭防火墙和内核安全机制

1.安装MySQL

卸载系统自带的数据库软件包
[root@centos7 ~]# rpm -qa |grep mariadb
使用YUM源安装mysql
[root@centos7 ~]# yum -y install mysql-server

2. 搭建时间同步

主服务器同步时间
[root@master ~]# yum -y install ntp
[root@master ~]# vim /etc/ntp.conf
# 以下添加注释
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst
# 25行添加,如果上面的服务器都无法同步时间,就和本机时间同步。127.127.1.0在这里是一个IP地址,
不是网段,指本机地址。
server 127.127.1.0
# 添加时间层级,同步上层服务器的层级,大小不能超过或等于16;
fudge 127.127.1.0 stratum 8
[root@master ~]# systemctl restart ntpd
从服务器分别同步主服务器
[root@slave1 ~]# yum -y install ntpdate
[root@slave1 ~]# ntpdate 192.168.10.128
[root@slave2 ~]# yum -y install ntpdate
[root@slave2 ~]# ntpdate 192.168.10.128

3. 开启binlog二进制文件

[root@master ~]# vim /etc/my.cnf
[mysqld]
## 新增4行内容
server-id=11 #标识数据库实例,最好>2,数值越小,优先级越高;
log-bin=master-bin #开启二进制日志
log-slave-updates=true #从库从主库复制的数据会写入log-bin日志文件里
binlog_format=mixed #设置二进制日志格式
[root@master ~]# systemctl restart mysqld

4.登录数据库,给从数据库授权

[root@master ~]# mysql -u root -p
Enter password:
## 给从服务器授权,允许使用myslave的身份复制master中所有数据库的所有表数据,并指定密码为
123456
mysql> GRANT REPLICATION SLAVE ON *.* TO 'myslave'@'192.168.10.%' IDENTIFIED BY
'123456';
mysql> flush privileges; #刷新权限
mysql> show master status; #查看数据库状态
+-------------------+----------+--------------+------------------+---------------
----+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
Executed_Gtid_Set |
+-------------------+----------+--------------+------------------+---------------
----+
| master-bin.000001 | 603 | | |
|
+-------------------+----------+--------------+------------------+---------------
----+
## 其中 File列是二进制日志文件,Position列显示位置偏移量。

5. 两台从服务器开启中继日志

[root@slave1 ~]# vim /etc/my.cnf
[mysqld]
# 新增3行内容
# 当两个备库server-id重复时,会导致从库跟主库的连接时断时连,产生大量异常。
server-id=22
relay-log=relay-log-bin #开启中继日志
relay-log-index=slave-relay-bin.index #指定中继日志索引文件
[root@slave1 ~]# systemctl restart mysqld
[root@slave2 ~]# vim /etc/my.cnf
[mysqld]
# 新增3行内容
# 当两个备库server-id重复时,会导致从库跟主库的连接时断时连,产生大量网络异常。
server-id=33
relay-log=relay-log-bin #开启中继日志
relay-log-index=slave-relay-bin.index
[root@slave2 ~]# systemctl restart mysqld

6. 两台从服务器 登录mysql,并配置同步;

[root@slave1 ~]# mysql -u root -p
Enter password:
mysql> change master to master_host='192.168.10.128',
master_user='myslave',master_password='123456',
master_log_file='master-bin.000001',
master_log_pos=603;
# master_host master的IP地址
# master_user 授权用户
# master_log_file master服务器的二进制日志
# master_log_pos master服务器二进制日志位置偏移量
mysql> start slave; #启动同步,如有报错执行reset slave
mysql> show slave status\G; #查看slave状态

验证MySQL主从复制

# 登录master主数据库
[root@master ~]# mysql -u root -p
Enter password:
mysql> create database school
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| school |
| sys |
+--------------------+
5 rows in set (0.00 sec)
# 登录slave1数据库,查看是否存在school数据库
[root@slave1 ~]# mysql -u root -p
Enter password:
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| school |
| sys |
+--------------------+
5 rows in set (0.01 sec)
# 登录slave2数据库,查看是否存在school数据库
[root@slave2 ~]# mysql -u root -p
Enter password:
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| school |
| sys |
+--------------------+
5 rows in set (0.01 sec)
# 此时,master和slave1、slvae2数据库中数据保持一致,说明MySQL主从复制搭建成功!!!
# 从服务器开启只读模式
mysql> set global read_only=1; #1是只读,0是读写
# 限制普通用户执行写操作,但具有super权限的用户可以执行写操作。
# 查询是否开启只读
mysql> show global variables like '%read_only%';

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值