您好,登錄后才能下訂單哦!
如何理解Mysql Replication,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。
Mysql Replication
類似于從一臺服務器拷貝數據庫到另一臺服務器上,但它是通過定義Master 和Slave的關系去實時地保證兩個數據庫的完全同步,這個功能在Mysql的3.23版中開始出現。
Master/Slave模式備份
TestEnv:
Master:Mysql-4.1.12 on Redhat9.0 IP:192.168. 0.217
Slave: Mysql-4.1.12 on Redhat9.0 IP:192.168.10.244
1、編譯,安裝
1. #tar –zxvf Mysql-4.1.12.tar.gz
2. #cd Mysql-4.1.12
3. .#/configure –prefix=/var/eyou/mysql
4. #make
5. #make install
6. #chown –R root /var/eyou/mysql
7. # chown –R mysql /var/eyou/mysql/var
8. #chgrp –R mysql /var/eyou/mysql
9. #scripts/mysql_install_db
10. #cp support-files/my-medium.cnf /etc/my.cnf
2、Master 機器設置權限,賦予Slave機器FILE及Replication Slave權利,并打包要同步的數據庫結構。
Master# pwd
/var/eyou/mysql/bin
Master#./mysql –u root –p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection id is 2 to server version: 4.1.12
Type 'help;' or 'h' for help. Type 'c' to clear the buffer.
mysql> GRANT FILE ON *.* TO rep@192.168.0.244 IDENTIFIED BY ‘eyou’;
mysql> GRANT REPLICATION SLAVE ON *.* TO rep@192.168.0.244 IDENTIFIED BY ‘eyou’;
賦予192.168.10.244也就是Slave 機器有File權限, 這個4.1.12版對replication的權限好像做了調整,只賦予Slave機器有File權限還不行,還要給它REPLICATION SLAVE的權限才可以。
然后打包要復制的數據庫
Master# cd var
Master# tar czvf reptest.tar.gz reptest
這樣,我們得到一個reptest數據庫的打包文件reptest.tar.gz
2設置主服務器Master的my.cnf,啟動Mysql服務
Master# vi /etc/my.cnf
在[mysqld]添加或修改以下的
[mysqld]
log-bin #打開logbin選項以能寫到slave的 I/O線程;
server-id=1 #表示是本機的序號為1,一般來講就是master的意思.
sql-bin-update-same
binlog-do-db= reptest #表示同步reptest數據庫;
然后把Master主服務器的Mysql重啟。
Master# /var/eyou/mysql/bin/mysqladmin –u root –p shutdown
Master# /var/eyou/mysql/bin/safe_mysqld --user=mysql &
3、建立Slave數據庫
剛才在Master中打包了reptest.tar.gz,它的作用就是要在Slave恢復成一樣的數據庫。先把Master 的reptest.tar.gz文件傳到Slave機器中去。然后
Slave# tar zxvf reptest.tar.gz -C /var/eyou/mysql/var/
4、修改Slave服務器的my.cnf
Slave# vi /etc/my.cnf
在[mysqld]添加或修改以下的
master-host=192.168.10.217
master-user=rep
master-password=eyou
master-port=3306
server-id=2
master-connect-retry=60
replicate-do-db=reptest [要更新的數據庫]
log-slave-updates
5、刪除Slave端數據庫目錄中的master.info
Slave# rm /var/eyou/mysql/var/master.info
6、重啟動Slave的slave start。
Slave# /var/eyou/mysql/bin/mysqladmin –u root –p shutdown
Slave# /var/eyou/mysql/bin/safe_mysqld --user=mysql &
7、測試
先檢測兩個Mysql數據庫中的reptest是否正常。
正常情況應該是Master和Slave 中的Mysql 都有相同的reptest 數據庫,并且里面的數據都一樣。
然后測試replication 功能是否起用。
在Master中的reptest數據庫添加一筆數據:
Master# /var/eyou/mysql/bin/mysql –u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection id is 12 to server version: 4.1.12
Type 'help;' or 'h' for help. Type 'c' to clear the buffer.
mysql> use reptest;
Database changed
mysql> INSERT INTO rep_table VALUES ('test1', '4321', 'T',24);
Query OK, 1 row affected (0.00 sec)
mysql>
然后查看Slave機器的reptest數據庫:
Slave#/var/eyou/mysql/bin/mysql –u root –p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection id is 12 to server version: 4.1.12
Type 'help;' or 'h' for help. Type 'c' to clear the buffer.
mysql> use reptest;
Database changed
mysql>select * from reptable;;
+------+------+------+------+
| id | name | sex | age |
+------+------+------+------+
| test1| 4321 | T | 24 |
+------+------+------+------+
1 row in set (0.00 sec)
PS :
1,Slave機器的權限問題,不但要給slave機器File權限,還要給它REPLICATION SLAVE的權限。
2.在修改完Slave機器/etc/my.cnf之后,slave機器的mysql服務啟動之前,記得要刪除掉master.info
3,在show master status 或著show slave status 不正常時,看看.err是怎樣說的。
4,Slave上Mysql的Replication工作有兩個線程, I/O thread和SQL thread 。I/O 的作用是從master 3306端口上把它的binlog取過來(master在被修改了任何內容之后,就會把修改了什么寫到自己的binlog等待slave更新),然后寫到本地的relay-log,而SQL thread則是去讀本地的relay-log,再把它轉換成本Mysql所能理解的語句,于是同步就這樣一步一步的完成.決定I/O thread的是/var/lib/mysql/master.info,而決定SQL thread的是/var/lib/mysql/relay-log.info.
雙向復制模式
1:
Slave 機器設置權限,賦予Master機器FILE及Replication Slave權利.
Master#./var/eyou/mysql –u root –p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection id is 2 to server version: 4.1.12
Type 'help;' or 'h' for help. Type 'c' to clear the buffer.
mysql> GRANT FILE ON *.* TO rep@192.168.0.217 IDENTIFIED BY ‘eyou’;
mysql> GRANT REPLICATION SLAVE ON *.* TO rep@192.168.0.217 IDENTIFIED BY ‘eyou’;
看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。