MySQL 主从同步
介绍了主从同步的定义,并实际操作,在同一电脑的两个 Ubuntu 虚拟机上配置主从。
主从同步的定义
主从同步使得数据可以从一个数据库服务器复制到其他服务器上,在复制数据时,一个服务器充当主服务器(master),其余的服务器则充当从服务器(slave)。
使用主从同步的好处:
- 在主服 务器上执行修改,在从服务器上向外提供读功能,通过增加从服务器来提高数据库性能
- 在从服务器实现备份,提高数据安全
- 在主服务器上生成实时数据,从服务器备份后进行数据分析,提高主服务器性能
配置主从同步
有很多种配置主从同步的方法,可以总结为如下的步骤:
- 在主服务上,必须开启二进制日志机制和配置一个独立的 ID
- 在每一台从服务器上,配置一个唯一的 ID,创建一个用来怎么复制主服务器数据的账户
- 在开始复制进程前,在主服务器上记录二进制文件的位置信息
- 如果在开始复制之前,数据库中已有数据,就必须先创建一个数据快照(可以使用 mysqldump 导出数据库,还在直接复制数据文件)
- 配置从服务器要链接的主服务器的 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 的配置文件 。
主服务器中去掉 server-id 与 log_bin 前的注释;从服务器中去掉 server-id 前的注释,并将 server-id 改为与主服务器中不同的值。保存退出后,在两个服务器中都运行如下命令重启 MySQL 服务器
以 root 用户登入主服务器中的 MySQL,创建用于从服务器同步数据使用的账号
并运行如下 MySQL 命令获取主服务器的二进制日志信息
在输出的表中有 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:刚刚查到的主服务器日志文件位置
然后开启同步,并查看同步状态
只要在同步状态输出中发现如下两行值为 Yes,就表明同步正常运行
这时你可以尝试在主服务器中进行修改,可以发现从服务器中可以同步获得更新。需要注意,同步是单向的,在主服务器中的修改可以同步到从服务器,反之则不能。