通過一番深思熟慮(google),最終決定了如下方案:mysql
1.在新服務器上搭建mysql,並做爲"從"服務器 2.使用innobackupex在不中止舊mysql服務的狀況下順利備份數據到從數據庫 3.將從服務器提高爲主服務器,舊項目代碼的數據庫鏈接方式改成遠程鏈接新數據庫 4.在新服務器上部署項目代碼,域名解析到新服務器,在徹底生效以前,舊服務器還須要承擔一部分請求 5.觀察舊服務器請求日誌,當沒有請求後完全刪除舊代碼和舊數據庫,完成整個遷移sql
主從搭建要注意的是數據庫版本最好保持一致,至少保證大版本號一致,從數據庫小版本號不要低於主數據庫數據庫
主從搭建比較簡單,大體分爲如下步驟服務器
1.修改主數據庫my.cnf,設置server_id 2.修改從數據庫my.cnf 設置server_id 3.修改從數據庫my.cnf 設置replicate-do-db來指定你想要同步的數據庫名稱,多個寫多行,若想同步全部,則不要設置這個參數 4.主數據庫上建立同步賬號並受權,給從服務器用的 5.從數據庫上配置slave 此時不要啓動slave,等數據庫備份過來再啓動google
具體步驟能夠參考這篇文章: http://369369.blog.51cto.com/319630/790921/.net
經過innobackupex備份指定的數據庫,將備份文件傳到從數據庫所在服務器,恢復數據。線程
備份過程參考這篇文章: http://blog.csdn.net/zhu19774279/article/details/49681767日誌
start slave;
一條sql語句,簡單!不要忘了查看狀態 show slave status\G
前面的主從設置文章裏有說明,這裏就不囉嗦了code
#查看主庫狀態 show processlist; Master has sent all binlog to slave; waiting for binlog to be updated show master status \G #從庫中止 IO_THREAD 線程 stop slave IO_THREAD; show processlist; Slave has read all relay log; waiting for the slave I/O thread to update it show slave status \G #從庫切換爲主庫 stop slave; reset master; reset slave all; show master status \G #激活賬戶 SELECT DISTINCT CONCAT('User: ''',user,'''@''',host,''';') AS query FROM mysql.user; GRANT REPLICATION SLAVE ON *.* TO 'slave_passport'@'10.10.16.51' IDENTIFIED BY 'slave_passport'; FLUSH PRIVILEGES; #切換原有主庫爲從庫 reset master; reset slave all; CHANGE MASTER TO MASTER_HOST='10.10.16.24', MASTER_USER='slave_passport', MASTER_PASSWORD='slave_passport', MASTER_PORT=3306, MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=804497686; #檢查主庫 SHOW PROCESSLIST; show master status \G #啓動從庫 SHOW PROCESSLIST; start slave; show slave status \G