mysql主從配置

   使用mysql主從複製的好處有

   1、採用主從服務器這種架構,穩定性得以提升。如果主服務器發生故障,我們可以使用從服務器來提供服務。

   2、在主從服務器上分開處理用戶的請求,可以提升數據處理效率。

   3、將主服務器上的數據複製到從服務器上,保護數據免受意外的損失。

下面是我在實際工作過程中所整理的筆記

一、MySQL的安裝與配置

值得一提的是,我的安裝過程都是源碼包編譯安裝的,並且所有的配置與數據等都統一規劃到了/usr/local/mysql目錄中,因此在一臺服務器上安裝完成以後,可以將整個mysql目錄打包,然後傳到其它服務器上解包,便可立即使用。

二、MySQL主從複製(全部複製)

場景描述:

主數據庫服務器:192.168.10.130,MySQL已經安裝,並且無應用數據。

從數據庫服務器:192.168.10.131,MySQL已經安裝,並且無應用數據。

2.1 主服務器上進行的操作

1

2

3

4

$ vi /usr/local/mysql/etc/my.cnf

[mysqld]

log-bin=mysql-bin   //[必須]啓用二進制日誌

server-id=130       //[必須]服務器唯一ID,默認是1,一般取IP最後一段

1

2

3

4

5

6

7

8

9

10

11

12

13

#啓動mysql服務

/usr/local/mysql/init.d/mysql start

#通過命令行登錄管理MySQL服務器

/usr/local/mysql/bin/mysql -uroot -p'new-password'

#授權給從數據庫服務器192.168.10.131

mysql> GRANT REPLICATION SLAVE ON *.* to 'rep1'@'192.168.10.131' identified by ‘password’;

#查詢主數據庫狀態

Mysql> show master status;

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

| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |

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

| mysql-bin.000005 | 261 | | |

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

記錄下 FILE 及 Position 的值,在後面進行從服務器操作的時候需要用到。

2.2 配置從服務器

1

2

3

4

$ vi /usr/local/mysql/etc/my.cnf

[mysqld]

log-bin=mysql-bin   //[必須]啓用二進制日誌

server-id=131       //[必須]服務器唯一ID,默認是1,一般取IP最後一段

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

#啓動mysql服務

/usr/local/mysql/init.d/mysql start

#通過命令行登錄管理MySQL服務器

/usr/local/mysql/bin/mysql -uroot -p'new-password'

#執行同步SQL語句

mysql> change master to

master_host=’192.168.10.130’,

master_user=’rep1’,

master_password=’password’,

master_log_file=’mysql-bin.000005’,

master_log_pos=261;

#正確執行後啓動Slave同步進程

mysql> start slave;

#主從同步檢查

mysql> show slave status\G

==============================================

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

Slave_IO_State:

Master_Host: 192.168.10.130

Master_User: rep1

Master_Port: 3306

Connect_Retry: 60

Master_Log_File: mysql-bin.000005

Read_Master_Log_Pos: 415

Relay_Log_File: localhost-relay-bin.000008

Relay_Log_Pos: 561

Relay_Master_Log_File: mysql-bin.000005

Slave_IO_Running: YES

Slave_SQL_Running: YES

Replicate_Do_DB:

……………省略若干……………

Master_Server_Id: 1

1 row in set (0.01 sec)

==============================================

其中Slave_IO_Running 與 Slave_SQL_Running 的值都必須爲YES,才表明狀態正常。

注意:如果主服務器已經存在應用數據,則在進行主從複製時,需要做以下處理:

(1)主數據庫進行鎖表操作,不讓數據再進行寫入動作

mysql> FLUSH TABLES WITH READ LOCK;

(2)查看主數據庫狀態

mysql> show master status;

(3)記錄下 FILE 及 Position 的值。

將主服務器的數據文件(整個/usr/local/mysql/data目錄)複製到從服務器,建議通過tar歸檔壓縮後再傳到從服務器解壓。

(4)取消主數據庫鎖定

mysql> UNLOCK TABLES;

2.3 驗證主從複製效果

主服務器上的操作

1

2

3

4

5

6

7

8

9

#在主服務器上創建數據庫first_db

mysql> create database first_db;

Query Ok, 1 row affected (0.01 sec)

#在主服務器上創建表first_tb

mysql> create table first_tb(id int(3),name char(10));

Query Ok, 1 row affected (0.00 sec)

#在主服務器上的表first_tb中插入記錄

mysql> insert into first_tb values (001,’myself’);

Query Ok, 1 row affected (0.00 sec)

在從服務器上查看

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

mysql> show databases;

=============================

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

| Database |

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

| information_schema |

| first_db |

| mysql |

| performance_schema |

| test |

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

5 rows in set (0.01 sec)

=============================

#數據庫first_db已經自動生成

       

mysql> use first_db

Database chaged

mysql> show tables;

=============================

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

| Tables_in_first_db |

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

| first_tb |

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

1 row in set (0.02 sec)

=============================

#數據庫表first_tb也已經自動創建

       

mysql> select * from first_tb;

=============================

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

| id | name |

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

| 1 | myself |

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

1 rows in set (0.00 sec)

=============================

#記錄也已經存在

由此,整個MySQL主從複製的過程就完成了。

三、MySQL主從複製複製部分庫或表

這裏跟全部複製不同的是主從服務器修改/etc/my.cnf配置的地方,這裏只介紹不同的情況。

3.1 主服務器的配置

1

2

3

4

5

6

#在/etc/my.cnf配置文件:

log-bin=mysql-bin # 啓動二進制日誌系統

server-id=130 # 本機數據庫唯一ID

log-bin=/var/log/mysql/updatelog # 設定生成log文件名,這裏的路徑沒有要手動創建並給它mysql用戶的權限。

binlog-do-db=test1 # 二進制需要同步的數據庫名

binlog-ignore-db=mysql,test # 避免同步mysql用戶配置,以免不必要的麻煩

3.2 從服務器的配置

1

2

3

4

5

6

7

8

9

10

#修改/etc/my.cnf 文件:

server-id=131 #從服務器ID號,不要和主ID相同

master-host=192.168.20.155 #指定主服務器IP地址

master-user=replication #指定在主服務器上可以進行同步的用戶名

master-password=123456 #密碼

master-port=3306 # 同步所用端口

master-connect-retry=60 #斷點從新連接時間

replicate-ignore-db=mysql #屏蔽對mysql庫的同步

replicate-do-db=test1 #同步的數據庫的名稱

replicate_do_table = testa #同步的數據表的名稱

replicate部分也可以這樣寫:

1

2

3

replicate-do-table=數據庫名.表名

#如果要是複製多個表只要在下面直接添加(複製幾個就添加幾個)

replicate-do-table=數據庫名.表名

mysql replication單表或多表複製時需注意的幾個問題:

1.主庫和從庫的數據庫名必須相同;

2.主庫和從庫的複製可以精確到表,但是在需要更改主庫或從庫的數據結構時需要立刻重啓slave;

3.不能在mysql配置文件裏直接寫入master的配置信息,需要用change master命令來完成;

4.指定replicate_do_db必須在my.ini裏配置,不能用change master命令來完成;

5.如果不及時清理,日積月累二進制日誌文件可能會把磁盤空間佔滿,可以在配置文件里加上expire_logs_days=7,只保留最近7天的日誌,建議當slave不再使用時,通過reset slave來取消relaylog;


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章