Skip to main content

MySQL主从同步

简介

将单机部署的mysql修改成多个mysql服务器主从同步,有多个优点:

  1. 有数据备份的效果:如果一个机器数据损坏丢失,其他机器上还有备份
  2. 缓解服务器压力:可以实现读写分离,主库写入数据,从库读取数据,压力分摊到多个服务器上
  3. 独立数据环境:从库的数据可以用来应用到测试和数据统计的场景中,不影响业务

异步复制方案

开启binlog,设置server-id

-- 查看是否开启bin_log
SHOW VARIABLES LIKE 'log_bin';
# 编辑配置文件
vim /usr/local/mysql/my.cnf

# 修改下面配置

# 开启binlog
bin_log

# 设置server-id (主从服务器都需要设置,id不能相同)
server-id = 10

主服务器设置账号

# 创建一个有自动复制功能的账号(主从复制)
# 允许复制*.*全部数据/全部表,账号名字 slave
# 允许其在任何主机%复制,复制的时候需要使用密码 123456
grant replication slave on *.* to 'slave'@'%' identified by '123456';

# 刷新权限
flush privileges;

# 查看主服务器状态
show master status;
mysql> show master status;
+----------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+----------------------+----------+--------------+------------------+-------------------+
| localhost-bin.000002 | 398 | | | |
+----------------------+----------+--------------+------------------+-------------------+

启动从服务器复制功能

# 给从服务器设置主从联系
change master to master_host='192.168.137.10', master_user='slave', master_password='123456', master_log_file='localhost-bin.000002', master_log_pos=398;

# 启动从服务器的复制功能
start slave;

# 关闭复制功能
stop slave;

# 验证从服务器是否成功
show slave status;

将主服务器的3306端口开放

# 开放3306端口
firewall-cmd --zone=public --add-port=3306/tcp --permanent
# 关闭3306端口
firewall-cmd --zone=public --remove-port=3306/tcp --permanent
# 使配置立即生效
firewall-cmd --reload
# 查看防火墙开启的所有端口
firewall-cmd --zone=public --list-ports

备注内容

Slave_IO_Running: Yes # 连接主服务器成功
Slave_SQL_Running: Yes