为什么要复制数据库?
简单来说有以下几个用处:
1. 读写分离
通过MySQL复制可以实现读写分离,将读操作分布到多个不同的服务器上,减轻服务器的压力。
2. 备份
从库可以作为数据的异地实时备份。
3. 故障切换
当主库遇到故障,系统可以切换到从库,实现故障切换。
4. 升级测试
从库可作为测试服务器的数据库。
复制数据的步骤:
- 在主库上把数据更改记录到二进制日志(Binary Log)中。
- 备库将主库上的日志复制到自己的中继日志(Relay Log)中。
- 备库读取中继日志中的事件,将其在备库上重新执行一遍。
具体操作步骤如下:
- 主备两台服务器安装相同版本的数据库,数据库的初始数据保持一致。
- (主库)配置同步账号
- 创建数据库复制用户:mysql>CREATE USER 'repl'@'172.16.127.83' IDENTIFIED BY '123456';
- 授权:mysql>grant replication slave on *.* to 'repl'@'172.16.127.83' ;
3.(主库)修改/etc/my.cnf文件,注意确保:server-
id 唯一
server-
id
=1
log-bin=mysql-bin
lower_case_table_names=1(数据表不区分大小写)
4.(主库)重启master端
1. service mysqld restart
5.(主库)查询主库上当前的二进制日志名和偏移量值,记录下file跟position的值,待会从库要用
1. mysql>show master status G
6.(从库)修改/etc/my.cnf文件,注意确保:server-
id 唯一
server-
id
=2
lower_case_table_names=1(数据表不区分大小写)
7.(从库)重启slave端
1. service mysqld restart
8.(从库)对从数据库服务器做相应设置,指定复制使用的用户,主数据库服务器的IP、端口以及开始执行复制的日志文件和位置等
1. mysql>CHANGE MASTER TO MASTER_HOST='172.16.127.49',MASTER_USER='repl',MASTER_PASSWORD='123456',MASTER_LOG_FILE='mysql-bin.000013',MASTER_LOG_POS=156;
9. (从库)启动slave线程
1. mysql>start slave;
10. 主库跟从库分别检查状态
1. 检查master的:mysql>show processlistG 结果:看到上面的Command: Binlog Dump说明配置成功!
2.检查slave的:mysql>show slave status G 结果:提示:Slave_IO_Running和Slave_SQL_Running两个值为YES基本上成功了