MySQL的主从复制(Replication),能够保持两台MySQL数据库的内容一致。由于其同步过程是异步的,因此备份数据库上作任何操做,都不会影响主数据库的性能。对游戏后台数据库而言,这是一个重大的优点:对备份数据库的查询、备份等操做都不会影响游戏的线上运行。配置主从复制有许多教程,但都很繁琐。我根据官方文档,总结出一个简单的配置流程。mysql
Master服务器上加入这两行(直接去掉注释便可):正则表达式
server-id = 1 log_bin = /var/log/mysql/mysql-bin.log
而后重启MySQL:sql
service mysql restart
Slave服务器加入这一行:数据库
server-id = 2
而后重启MySQL:服务器
service mysql restart
在Master服务器上备份数据库,能够只有指定的数据库,不一样步mysql库:app
mkdir /masterdb mysqlhotcopy --resetmaster --flushlog --addtodest --regexp=<数据库匹配正则表达式> /masterdb
先在Slave服务器上mysql中中止slave模式并重置:异步
stop slave; reset slave;
而后关闭mysql:性能
stop mysql
中止mysql后,把备份的Master数据库目录传到Slave服务器上的mysql目录中,能够用scp
命令拷贝:线程
scp -r -P <端口> /masterdb/* root@<IP地址>:/Jpcq/MySQL/
拷贝到Slave的文件须要修改owner:rest
chown -R mysql:mysql *
修改Slave的my.cnf文件,禁止同步mysql库:
replicate-ignore-db=mysql
启动mysql:
start mysql
从新开启slave模式,在mysql中执行:
change master to master_host='<Master IP地址>', master_user='<用户名>', master_password='<密码>'; start slave;
方法二:使用mysqldump,通用,可是慢:
在Master服务器上备份数据库:
mysqldump --all-databases --master-data >apply_slave.sql
把备份文件dbdump.db传到Slave服务器上,恢复数据库:
mysql <apply_slave.sql
在Slave服务器上开启slave模式,在mysql中执行:
change master to master_host='<Master IP地址>', master_user='<用户名>', master_password='<密码>'; start slave;
Slave显示同步状态:
show slave status\G;
显示进程列表:
show processlist\G;
Master显示正在同步的Slaves:
show slave hosts;
Master显示最新binlog位置:
show master status;