Skip to content

MySQL 主从同步

介绍了主从同步的定义,并实际操作,在同一电脑的两个 Ubuntu 虚拟机上配置主从。

主从同步的定义

主从同步使得数据可以从一个数据库服务器复制到其他服务器上,在复制数据时,一个服务器充当主服务器(master),其余的服务器则充当从服务器(slave)

使用主从同步的好处:

  • 在主服 务器上执行修改,在从服务器上向外提供读功能,通过增加从服务器来提高数据库性能
  • 在从服务器实现备份,提高数据安全
  • 在主服务器上生成实时数据,从服务器备份后进行数据分析,提高主服务器性能

配置主从同步

有很多种配置主从同步的方法,可以总结为如下的步骤:

  1. 在主服务上,必须开启二进制日志机制和配置一个独立的 ID
  2. 在每一台从服务器上,配置一个唯一的 ID,创建一个用来怎么复制主服务器数据的账户
  3. 在开始复制进程前,在主服务器上记录二进制文件的位置信息
  4. 如果在开始复制之前,数据库中已有数据,就必须先创建一个数据快照(可以使用 mysqldump 导出数据库,还在直接复制数据文件)
  5. 配置从服务器要链接的主服务器的 IP 地址和登录授权,二进制日志文件名和位置

如下在本机的两个 Ubuntu 虚拟机上配置主从同步

如果在设置主从同步前,主服务器上已有大量数据,可以使用 mysqldump 进行数据备份并还原到从服务器,以实现数据复制。执行如下命令将主服务器上的数据进行备份

mysqldump -uroot -pmysql --all-databases --lock-all-tables > ~/Desktop/master_db.sql
# --all-databases 导出所有数据库
# --lock-all-tables 执行操作时锁住所有表
# ~/Desktop/master_db.sql 导出的备份数据的位置

然后将主服务器上的备份文件 master_db.sql 移到从服务器上,并进入从服务器存放该备份文件的目录,输入如下命令

mysql -uroot -pmysql < master_db.sql

此时,从服务器就拥有了与主服务器一样的数据库。

主(从)服务器中打开 MySQL 的配置文件 。

sudo vim /etc/mysql/mysql.conf.d/mysql.cnf

主服务器中去掉 server-id 与 log_bin 前的注释;从服务器中去掉 server-id 前的注释,并将 server-id 改为与主服务器中不同的值。保存退出后,在两个服务器中都运行如下命令重启 MySQL 服务器

sudo service mysql restart

以 root 用户登入主服务器中的 MySQL,创建用于从服务器同步数据使用的账号

grant replication slave on *.* to 'slave'@'%' identified by 'slave';

并运行如下 MySQL 命令获取主服务器的二进制日志信息

show master status;

在输出的表中有 file 与 position 这两列,在我的主服务器上,其内容如下

File Position
mysql-bin.000002 154

以 root 用户进入从服务器中的 MySQL,设置其连接到主服务器

change master to master_host='192.168.61.151', master_user='slave', master_password='slave', master_log_file='mysql-bin.000002', master_log_pos=154;
-- master_host:主服务器的ip地址
-- master_user, master_password:专门用来同步的账户
-- master_log_file:刚刚查询到的主服务器日志文件名
-- master_log_pos:刚刚查到的主服务器日志文件位置

然后开启同步,并查看同步状态

-- 开启同步
start slave;
-- 查看运行同步状态
show slave status \G;

只要在同步状态输出中发现如下两行值为 Yes,就表明同步正常运行

Slave_IO_Running: Yes
Slave_SQL_Running: Yes

这时你可以尝试在主服务器中进行修改,可以发现从服务器中可以同步获得更新。需要注意,同步是单向的,在主服务器中的修改可以同步到从服务器,反之则不能。