MySQL主從配置,實現數據備份。

Replication是MySQL提供的數據庫同步複製功能,增強了MySQL數據庫的穩定性,對我們實現數據庫的容災、備份帶來了極大好處。優點是配置簡單並且MySQL自身的replicate消耗整體資源不到1%。

1.安裝MySQL

1)在linux鏡像中自帶mysql安裝包,找到:

mysql-server-5.1.61-4.el6.x86_64

mysql-libs-5.1.61-4.el6.x86_64

mysql-5.1.61-4.el6.x86_64

mysql-devel-5.1.61-4.el6.x86_64

2)以root用戶安裝MySQL:

[root@vmx80 11]# yuminstall mysql

[root@vmx80 11]# rpm-qa|grepmysql

mysql-server-5.1.61-4.el6.x86_64

mysql-libs-5.1.61-4.el6.x86_64

mysql-5.1.61-4.el6.x86_64

mysql-devel-5.1.61-4.el6.x86_64

[root@vmx80 11]#chkconfig–level 2345 mysqld on    

3)mysql的默認目錄:

數據庫目錄:/var/lib/mysql

配置文件目錄:/usr/share/mysql

2.配置master

原理:

1、創建用於複製的數據庫用戶;

2、配置my.cnf;

3、通過dump方式把所需要備份數據庫表導出來傳到slave端。

步驟:

1)在指定庫中創建一張測試表測試同步複製:

[root@vmx80 mysql]#mysql -u root -p

mysql> use test

mysql> create tablecs8(id int);mysql> show tables;

mysql> insert intocs8 values(5);

2)  創建用於數據庫同步用戶replicate

mysql> grant allprivileges on *.* to 'replicate'@'10.1.1.2' identified by 'replicate';

使設置生效:

mysql> flushprivileges;

3)  停止Mysql服務

[root@vmx80 mysql]#service mysqld stop

4)  更改配置文件/etc/my.cnf

[root@vmx80 mysql]# vi/etc/my.cnf

[mysqld]

datadir=/var/lib/mysql

socket=/var/lib/mysql/mysql.sock

user=mysql

symbolic-links=0

server-id=80

log-bin=mysql-bin

# 1master特有參數

binlog-do-db=test  #如果是要同步多個數據庫可以在添加一條binlog-do-db=hive1

binlog_format=ROW

binlog-ignore-db=mysql

expire_logs_days=10  #binlog只保留最近10天的,超過10天爲過期自動被刪除

# 2下面是切換後作爲slave端需要設置的參數,且需註釋掉1中參數

relay_log=mysql-relay-bin

replicate-do-db=test

[mysqld_safe]

log-error=/var/log/mysqld.log

pid-file=/var/run/mysqld/mysqld.pid

#####標紅註釋

l  Log-bin:啓動二進制日誌文件

l  Binlog-do-db:二進制需要同步的數據庫名

l  binlog-ignore-db=mysql:不同步的數據庫名

l  Server-id:本機數據庫ID

l  Binlog_format:一共有三種複製方式:ROW\STATEMENT\MIXED,默認是STATEMENT

5)通過dump方式導出備份庫表數據

[root@vmx80 mysql]# cd/var/lib/mysql

[root@vmx80 mysql]# mysqldump-uroot -p test >test.sql

[root@vmx80 mysql]# scp [email protected]:/var/lib/mysql/

6、  啓動mysql

[root@vmx80 mysql]#service mysqld start

3.配置slave

原理:

1)創建用於複製的數據庫用戶;

2)創建需要同步的數據庫;

3)配置my.cnf;

4)把master傳過來的dump導入數據庫;

步驟:

1) 創建用於複製的數據庫用戶:

[root@vmx81]# mysql-uroot -p

mysql> grant allprivileges on *.* to 'replicate'@'10.1.1.1' identified by 'replicate';

讓權限生效:

mysql> flushprivileges;

2) 創建需要同步的數據庫:

mysql> createdatabase test;--如果slave端沒有這個數據庫

3)  配置my.cnf:

[root@vmx81 /]# vi/etc/my.cnf

[mysqld]

datadir=/var/lib/mysql

socket=/var/lib/mysql/mysql.sock

user=mysql

server-id=81

log-bin=mysql-bin

# 1 slave特有參數

relay_log=mysql-relay-bin

replicate-do-db=test   #如果同步多個數據庫可以添加一條replicate-do-db=hive1

# 2 下面是切換後作爲master端需要設置的參數,且需註釋掉1中參數

binlog_format=ROW

binlog-do-db=test

binlog-ignore-db=mysql

expire_logs_days=10  #binlog只保留最近10天的,超過10天爲過期自動被刪除

####註釋:

l  server-id爲數據庫ID,不要和同一個master-slave架構中的其他server-id重複

l  log-bin啓用二進制文件

l  relay_log啓用從庫二進制文件

l  replicate-do-db同步的數據庫名`

4) 重啓mysql服務以應用配置文件更改項:

[root@vmx81 /]# service mysqldrestart

5)  導入master備份庫的dump文件:

[root@vmx81 /]#mysql -uroot -p test < test.sql

4.開啓同步複製:

1)在master端:

mysql> change masterto  master_host='10.1.1.2',master_user='replicate', master_password='replicate', master_port=3306,master_log_file='mysql-bin.000001', master_log_pos=106;

2)  在slave端:

mysql> change masterto  master_host='10.1.1.1',master_user='replicate', master_password='replicate', master_port=3306,master_log_file='mysql-bin.000001', master_log_pos=106;

其中各項參數含義如下:

l  master_host master主機IP地址

l  master-user數據同步的用戶

l  master-password數據同步的用戶密碼

l  master-port同步使用端口

l  master_log_file開始同步時讀取的初始master二進制文件,通過master端執行show master status查看得到

l  master_log_pos開始同步時讀取的初始master二進制文件Position, 通過master端執行show master status查看得到

5.同步測試

目標:

1)  檢查master狀態;

2)  檢查slave狀態;

3)  同步之前master端數據表已恢復到slave端;

4)  同步開啓後master端與slave端數據雙向同步複製;

步驟:

1)  檢查master端狀態:

mysql> show masterstatus;           #檢查作爲master的狀態

+------------------+----------+--------------+------------------+

| File             | Position | Binlog_Do_DB |Binlog_Ignore_DB |

+------------------+----------+--------------+------------------+

| mysql-bin.000012|      406 | test         |                  |

mysql> show slavestatus \G          #檢查作爲slave的狀態

***************************1. row ***************************

          Read_Master_Log_Pos: 106

               Relay_Log_File:mysql-relay-bin.000026

                Relay_Log_Pos: 251

             Relay_Master_Log_File:mysql-bin.000012

             Slave_IO_Running: Yes

             Slave_SQL_Running: Yes

2)  檢查slave端狀態:

mysql> show masterstatus;           #檢查作爲master的狀態

+------------------+----------+--------------+------------------+

| File             | Position | Binlog_Do_DB |Binlog_Ignore_DB |

+------------------+----------+--------------+------------------+

| mysql-bin.000012|      106 | test         |                  |

mysql> show slavestatus \G;            #檢查作爲master的狀態

***************************1. row ***************************

          Read_Master_Log_Pos: 406

               Relay_Log_File:mysql-relay-bin.000035

                Relay_Log_Pos: 551

        Relay_Master_Log_File: mysql-bin.000012

             Slave_IO_Running: Yes

            Slave_SQL_Running: Yes

3)  檢查同步之前的數據:

mysql> select * fromcs8;

| id   |

+------+

|    5 |

4)測試雙向同步複製:

a)        Master端向slave端同步數據:

Master端:

mysql> create tablecs9(id int);

mysql> insert intocs9 values(9);

slave端:

mysql> select * fromcs9;

| id   |

+------+

|    9 |

b)        slave端向master端同步數據:

Slave端:

mysql> create tablecscs(id int);

mysql> insert intocscs values(33);

master端:

mysql> select * fromcscs;

+------+

| id   |

+------+

|   33 |

+------+

至此,mysql已經設置完畢。
發佈了49 篇原創文章 · 獲贊 7 · 訪問量 14萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章