Linux數據庫:MySQL主從同步設置和同步錯誤處理
1、兩臺服務器數據庫版本應一致,如果不一致,從服務器的版本要高于主服務器的版本。
2、MySQL進行實時數據同步,本質上是將mysql動作同步到Slave服務器,而不是對實質的數據進行同步。所以同步開始前,兩端的數據要保持一致。
Master服務器:192.168.0.1
Slave服務器:192.168.0.2
=== Master停止運行時,Mysql同步配置===
一、主服務器設置:
1、修改/etc/f
在[mysqld]區段內加入參數
server-id=1
log-bin
sql-bin-update-same
2、為Slave服務器創建連接賬戶,用于同步
mysql>GRANT FILE ON *.* TO backup@192.168.1.2 IDENTIFIED BY ‘1234’;
3、重啟mysql服務:service mysqld restart
此時因為有加入log-bin參數,因此開始有index產生了,在/var/lib/mysql目錄下有.index檔案紀錄數據庫的異動log. 二、Slave服務器設置:
1、修改/etc/f
在[mysqld]區段加入
master-host=192.168.0.1
master-user=backup
master-password=1234
master-port=3306
server-id=2
master-connect-retry=60 預設重試間隔60秒
replicate-do-db=vbb 告訴slave只做vbb數據庫的更新
replicate-ignore-db=mysql #不同步的數據庫
replicate-ignore-table=ers #不同步vbb數據庫的users表
log-slave-updates=1
2、重啟Slave服務器mysql服務
三、Slave服務器從主服務器讀取數據,并開啟同步
1、mysql>FLUSH TABLES WITH READ LOCK; #首先執行這個,對主服務器加鎖
2、mysql>LOAD DATA FROM MASTER #語句的話,必須授予全局的 FILE 和 SELECT 權限,僅針對MyISAM引擎,對InnoDB表無用。
3、如果數據是InnoDB的,需要在服務器上將表結構和數據分開導出,然后拷貝至Slave服務器。
導出整個數據庫結構和數據:mysqldump -u用戶名 -p密碼 -h主機 database > filename.sql
導出某個表的數據和結構:mysqldump -u用戶名 -p密碼 -h主機 database table > filename.sql
只導出數據庫中表的數據:mysqldump -u用戶名 -p密碼 -h主機 -T database table > filename.sql
只導出數據庫中表的結構:mysqldump -u用戶名 -p密碼 -h主機 -d database table > filename.sql 4、確保兩端數據一致后,開啟同步
mysql>slave start;
5、查看Slave服務器同步信息
mysql>show slave statusG;
可以看到,Slave_IO_Running 和 Slave_SQL_Running 兩列的值都為 "Yes",這表明 Slave 的 I/O 和 SQL 線程都在正常運行。
6、對Master服務器釋放鎖
mysql>UNLOCK TABLES;
=== Master還在運行中,如何在不停止它的情況下配置Slave ===
注:主從服務器的配置同上。
1、首先在Master服務器查看同步日志信息
mysql>show master status;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000054 | 680 | | mysql |
+------------------+----------+--------------+------------------+
可以看到日志文件是:mysql-bin.000054,同步點是680
2、在Slave服務器配置同步
mysql>slave stop; # mysql默認同步開始
mysql>CHANGE MASTER TO MASTER_HOST='192.168.0.1',MASTER_USER='backup',MASTER_PASSWORD='1234',MASTER_LOG_FILE='mysql-bin.000054',MASTER_LOG_POS=690; #配置同步點
mysql>slave start; #開啟同步
3、查看同步信息
mysql>show slave statusG;
可以看到,Slave_IO_Running 和 Slave_SQL_Running 兩列的值都為 "Yes",這表明 Slave 的 I/O 和 SQL 線程都在正常運行。
4、配置完成
MYSQL服務器復制配置
這是根據我之前看的MYSQL復制的文檔然后自己親自實驗的過程.配置的功能比較簡單.
環境:
主服務器:
redhat9
mysql 5.0.16 機器名:dbmaster
IP:192.168.0.111
從服務器:
redhat9
mysql5.0.16
機器名:dbslave
IP:192.168.0.100
配置過程:
整個過程與MYSQL文檔中的復制設置步驟一一對應,只是具體化和標明了一些要注意的地方..如果有興趣的朋友可以對照閱讀,會更加理解.
1.確認兩臺服務器的MYSQL版本,用mysql –V命令查看
注意: MySQL不同版本之間的(二進制日志)binlog格式可能會不一樣,所以最好采用相同的版本.如果達不到要求,必須要保證Master的版本不能高于Slave版本
2.在主服務器上為服務器設置一個連接賬戶。該賬戶必須授予REPLICATION SLAVE權限。我為了簡單沒做這一步,直接用root賬戶.
正常的步驟是:
假定你的域為,想要創建用戶名為repl的一個賬戶,從服務器可以使用該賬戶從你的域內的任何主機使用密碼slavepass來訪問主服務器。要創建該 賬戶,可使用GRANT語句:
mysql> GRANT REPLICATION SLAVE ON *.*
->TO 'repl'@'%.' IDENTIFIED BY 'slavepass';
如果想要在Slave上有權限執行 "LOAD TABLE FROM MASTER" 或 "LOAD DATA FROM MASTER" 語句的話,必須授予全局的 FILE 和 SELECT 權限:
mysql>GRANT FILE,SELECT,REPLICATION SLAVE ON *.* TO 'repl'@'%.' IDENTIFIED BY 'rep';
3.在主服務器上執行FLUSH TABLES WITH READ LOCK語句來刷新表,同時阻止寫操作.:
mysql> FLUSH TABLES WITH READ LOCK;
然后對主服務器上的數據進行快照。(此時不要退出mysql的提示符,退出的話就解鎖了.新開一個ssh窗口進行下面所說的歸檔打包操作)