mysql 下的 複寫

windows下配置mysql


主服務器下設置my.ini文件(C:\Program?Files\MySQL\MySQL?Server?5.1)linux

文件末尾添加如下代碼:sql

server-id=252 # 惟一表示碼,建議使用 IP 最後一欄數據庫

log-bin=D:\mysqlback # 日記文件名windows

bin-do-db=mydb; # 須要 replication 的 DB ,多個則多條對應語句服務器


從服務器下設置my.ini文件(C:\Program?Files\MySQL\MySQL?Server?5.1)ide

server-id=253性能

master-host=192.168.198.252spa

master-user=rep_user命令行

master-password=rep_user

master-port=3306

master-connect-retry=60 # 宕機或鏈接丟失的狀況下,從服務器從新鏈接的秒數


replicate-do-db=mydb # 告訴從服務器限制默認數據庫爲mydb的語句複製,多個則多條語句

slave-skip-errors=all # 忽略錯誤


主服務器下開放一個用戶,用於從服務器 replicate 訪問

GRANT REPLICATION SLAVE ON *.* TO 'rep_user'@'192.168.198.%' IDENTIFIED BY 'rep_user'

GRANT SUPER, RELOAD ON *.* TO 'rep_user'@'192.168.198.%'

# GRANT SELECT, FILE, REPLICATION SLAVE ON *.* TO 'rep_user'@'192.168.198.%'


在主服務器下,拷貝數據庫文件目錄Data ,到從服務器下 (能夠在my.ini下修改數據庫的保存路徑)

路徑 (C:\Program Files\MySQL\MySQL Server 5.1\data) # 本次使用的數據庫引擎MyISAM,能夠直接拷貝


分別重啓主從服務器....


在從服務器 mysql 命令行下,輸入命令: load data master


在主服務器 mysql 命令行下,查看結果:show master status;


在從服務器 mysql 命令行下,執行:

slave start;

show slave status \G;


能夠看到 「Waiting for master to send event 」的字眼,表示成功



說明:在第一次設置完成master,slave以後,若是要修改slave的my.ini裏master的設置必須先刪除data下面的master.info文件,重啓服務才能生效。不然服務器會以master.info中的信息爲準。




//****************************************************************

//** for linux 

//** 設置大體與 windows 下相同 

//** 設置my.cnf文件

//****************************************************************



在實際的應用過程當中,若是全部slave都直接連到master 上,全部的slave都會從master上接受binglog的內容,而當你業務擴張的時候,slave 節點的不斷增長,這必然會對master增長負擔,容易達到瓶頸。

      有一種提升Replication性能的方法,就是增長mysql Replication結構的深度,就是一個master 只Replication給一個slave,在由這個slave 複製給其餘的slave。

      結構爲:master1-->master2-->slave1....



(Mysql的版本都是5.6.9)

環境:

Maste1 :

      Hostname:media

      Ip:172.72.15.41

Master2:

      Hostname:rac1

      Ip:172.72.15.151

Slave1:

      Hostname:rac2

      Ip:172.72.15.152


詳細步驟:

一:導出數據:

在導出數據以前把數據庫的表都鎖上,並置於read only狀態

mysql> flush tables with read lock;

Query OK, 0 rows affected (0.00 sec)

 

mysql> set global read_only=on;

Query OK, 0 rows affected (0.00 sec)


再開始maste1上面把數據導出來,因爲5.6版本增長了gtid的功能,因此在用mysqldump導出的時候,能夠經過 --set-gtid-purged 這個選項控制是否要用gtids來恢復,默認是開啓的!


[root@media ~]# mysqldump -u root -psbcenter -B new1 > /tmp/new1.sql

Warning: Using a password on the command line interface can be insecure.

Warning: A partial dump from a server that has GTIDs will by default include the GTIDs of all transactions, even those that changed suppressed parts of the database. If you don't want to restore GTIDs, pass --set-gtid-purged=OFF. To make a complete dump, pass --all-databases --triggers --routines --events. 


[root@media ~]# scp /tmp/new1.sql 172.72.15.151:/root/ (scp 複製文件,不一樣linux下)

root@172.72.15.151's password: 

new1.sql                                                                                                                             100% 8346     8.2KB/s   00:00    


二:到maste2,slave1上導入數據

 若是mysqldump 導出數據的時候 --set-gtid-purged 沒有設置成off,那麼master2啓動mysqld 的時候須要 啓用gtid_mode=on

Master2上導入數據

[root@rac1 ~]# mysql < new1.sql

Slave1 上導入數據

[root@rac2 ~]# mysql < /root/new1.sql 

三:建立複製用戶

在master 1 上建立master2的複製用戶

mysql> GRANT REPLICATION SLAVE ON *.* TO 'rep1'@'172.72.15.151' IDENTIFIED BY  '123456';

mysql> flush privileges ;

Query OK, 0 rows affected (0.00 sec)

在master2上建立slave1 的複製用戶

mysql> GRANT REPLICATION SLAVE ON *.* TO 'rep1'@'172.72.15.152' IDENTIFIED BY  '123456';

mysql> flush privileges;

Query OK, 0 rows affected (0.00 sec)

 

四:在master2和slave1 上配置master屬性

在master2上配置master屬性

mysql> change master to

    -> master_host='172.72.15.41',

    -> master_user='rep1',

    -> master_password='123456',

    -> master_auto_position=1;

Query OK, 0 rows affected, 2 warnings (0.17 sec)

 

mysql>start slave;

 

在slave1 上配置master屬性

mysql> change master to

    -> master_host='172.72.15.152',

    -> master_user='rep1',

    -> master_password='123456',

    -> master_auto_position=1;

Query OK, 0 rows affected, 2 warnings (0.17 sec)

 

mysql>start slave;

 

 

整個過程就是這樣,另外要說起的一點是若是mysql 版本是5.6如下的或者是沒開啓gtids

的,須要在master2上配置log-slave-updates 參數,這個參數的做用是master2接受到master1的binlog到relay日誌中去時,也會更新到本身的binlog中去,以便給它的slave使用!

相關文章
相關標籤/搜索