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;