本文記錄如何給一臺應(yīng)用中的MySQL服務(wù)器部署Replication。
安裝環(huán)境
現(xiàn)有MySQL
現(xiàn)有MySQL服務(wù)器的特點:
- 沒有專門為Replication環(huán)境配置
- MySQL為編譯安裝
- MySQL處于運行狀態(tài),不可長時間停機(jī)
目的
將現(xiàn)有服務(wù)器作為Master服務(wù)器,配置并運行一臺新的MySQL服務(wù)器作為Slave服務(wù)器
準(zhǔn)備
- 服務(wù)器硬件
- 現(xiàn)有主服務(wù)器的安裝代碼包(mysql-5.x.xxx.tar.gz)
主服務(wù)器的配置和數(shù)據(jù)準(zhǔn)備
Master服務(wù)器的必須配置
要使用Replication必須將Master的binlog打開,并設(shè)置服務(wù)器ID。最簡單的配置如下:
log-bin = mysql-bin
server-id = 1
當(dāng)然關(guān)于MySQL Bin Log的配置還有很多設(shè)置,可以參考相關(guān)手冊
數(shù)據(jù)備份
現(xiàn)在需要將Master的數(shù)據(jù)備份出來要注意的是要記住
備份點的binlog日志和postion 。Master數(shù)據(jù)備份的方式可以是停機(jī)冷備份,如果安裝了LVM可以使用LVM的Snapshot。下面使用mysqldump 導(dǎo)出數(shù)據(jù)。在導(dǎo)出數(shù)據(jù)之前我們應(yīng)該Flush表,并鎖住表,比允許數(shù)據(jù)寫入。
mysql> FLUASH TABLES WITH READ LOCK;
mysql> SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000157 | 18757860 | | |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
使用mysqldump導(dǎo)出數(shù)據(jù)
mysql:~# mysqldump -uroot -p --all-databases > dump.sql
解鎖
mysql> UNLOCK TABLES;
安裝參數(shù)的提取
需要在Slave主機(jī)編譯安裝MySQL要了解Master安裝時的編譯參數(shù),可以通過如下方式獲得:
mysql:~# cat /usr/local/mysql/bin/mysqlbug | grep CONFIGURE
repl用戶創(chuàng)建
在Master服務(wù)器中創(chuàng)建repl用戶,用于在Slave 數(shù)據(jù)庫中訪問Master數(shù)據(jù)
mysql> GREANT REPLICATION SLAVE ON *.* to 'repl'@'IP.SLAVE.SERVER' identified by 'repl_passwd';
Slave服務(wù)器的安裝
MySQL的安裝
- 按前面提取的configure參數(shù)對源代碼進(jìn)行編譯(
./configure; make; make install;)
- 安裝初始化數(shù)據(jù)庫:
#mysql_install_db --datadir=/data --user=mysql
- 參照@{mysql-src}/support-files/
目錄中my.cnf文件在/etc/下創(chuàng)建@my.cnf
- 參照@{mysql-src}/support-files/mysql.server@文件在@/etc/init.d/
下配置@mysqldb
- 可嘗試啟動mysql。
/etc/init.d/mysqldb start
數(shù)據(jù)的導(dǎo)入
mysql# mysql -uroot -p < dump.sql
如果導(dǎo)入出現(xiàn)超出最大數(shù)據(jù)包錯誤可以嘗試修改my.cnf中的max_allow_packet
在my.cnf中配置slave
在my.cnf中配置:
server-id = 2
master-host = master_ip
master-user = repl
master-password = repl_passwd
在Slave服務(wù)器上啟動Slave
mysql> STOP SLAVE;
mysql> CHANGE MASTER TO
MASTER_HOST='masterip',
MASTER_USER='repl',
MASTER_PASSWORD='repl_passwd',
MASTER_LOG_FILE='mysql-bin.000157',
MASTER_LOG_POS=18757860 ;
mysql> START SLAVE;