一、MySQL主從介紹
什么是主從呢,就是一個是正常用的,另外是一個是他的備份。主的叫做master,從叫做salve。什么時候master掛掉了,就啟用salve,保證系統可以正常運行。
當我們系統數據量比較大的時候,一台數據庫服務器速度就比較慢了,影響性能,也可以通過主從的方式來提高性能。比如說我現在有2台數據庫服務器,一台是master,一台是salve,那我寫操作(update、insert)都在master上做,查詢操作(select)都在salve機子上做操作,這樣就有2台數據庫了,就提高了性能,這就是傳說中的,讀寫分離,也是一主一從。如果說查詢的操作比較多,比寫的多很多,一個salve頂不住了,效率很低,那就可以再加N台salve,多台一起服務,這就是一主多從。這也是mysql的集群。
Mysql服務器之間的主從同步是基於二進制日志機制,主服務器使用二進制日志來記錄數據庫的變動情況,從服務器通過讀取和執行該日志文件來保持和主服務器的數據一致。
在使用二進制日志時,主服務器的所有操作都會被記錄下來,然后從服務器會接收到該日志的一個副本。從服務器可以指定執行該日志中的哪一類事件(譬如只插入數據或者只更新數據),默認會執行日志中的所有語句。
既然是集群,群,最少有2台才叫群,一個就是單台了。需要准備2台裝有mysql的服務器,我這里在Windows上裝了一個,在虛擬機里面裝了一個mysql,虛擬機的mysql當做master節點,Windows的當salve。
二、主從配置步驟
1、 在主服務器上,必須開啟二進制日志機制和配置一個獨立的ID
2、在每一個從服務器上,創建一個用來專門復制主服務器數據的賬號
3、在開始復制進程前,在主服務器上記錄二進制文件的位置信息
4、如果在開始復制之前,數據庫中已經有數據,就必須先創建一個數據快照(可以使用mysqldump導出數據庫,或者直接復制數據文件)
5、配置從服務器要連接的主服務器的IP地址和登陸授權,二進制日志文件名和位置
三、具體操作
1、啟用主服務器上的二進制日志,和獨立的severid,在mysql的配置文件中找到server-id和log_bin這兩個參數,server-id要設置一個唯一的id,log_bin自己指定一個文件就行,如果這兩個參數沒有的話,自己加上就可以了。
ps:改完配置文件一定要重啟一下mysql,要不然不生效。
1
2
|
server-id=1 #唯一的,不要和其他機子上mysql重復
log-bin=/usr/local/mysql_data/mysql-bin.log #寫一個存在的路徑,但是這個目錄下必須有權限,如果沒有的話使用chmod加上權限即可
|
2、創建一個用來專門同步數據用的用戶,sql如下,用戶名和密碼都可以自己隨便寫。
1
2
3
|
GRANT REPLICATION SLAVE ON *.* TO 'username'@'%' identified by 'password'; #添加用戶
FLUSH PRIVILEGES;#刷新權限
|
3、找到主服務器上的二進制文件和位置,使用下面的sql就可以看到了,先記錄一下file和Position這2列,要在slave服務器上配置
1
|
SHOW MASTER STATUS;
|
4、復制之前的數據,我的master上是有一些表和數據的,要先把它整到slave一份。
先用mysqldump備份整個數據庫
1
2
3
4
5
6
7
|
mysqldump -uroot -p123456 --all-databases --lock-all-tables > ~/master_db.sql
#-u :用戶名
#-p :示密碼
#--all-databases :導出所有數據庫
#--lock-all-tables :執行操作時鎖住所有表,防止操作時有數據修改
#~/master_db.sql :導出的備份數據(sql文件)位置,可自己指定
|
備份完之后,拿到的salve執行一下,也就是我Windows上面的mysql,咋執行都ok,可以直接把sql文件里面的sql語句復制出來執行,可以直接用mysql命令執行sql文件。
5、在slave節點上配置master的信息,讓它能找到master。
在slave節點的配置文件里面找到server-id也改成唯一的一個,不能和其他的一樣
ps:這里改完別忘了重啟,配置文件修改完之后,重啟了之后才會生效
在slave上執行下面的sql,設置主服務器的信息
1
2
3
4
5
6
7
8
9
10
11
12
|
change master to master_host='10.234.137.164', master_user='slave', master_password='123456',master_log_file='mysql-bin.000001', master_log_pos=2544;
-- master_host就是master的ip
-- master_user就是上面建的用戶
-- master_password上面創建用戶的密碼
-- master_log_file是剛才上面讓記的file那一列的值
-- master_log_pos是剛才上面讓記的Position那一列的值
|
上面只是設置了master節點的信息,還沒有開始同步,執行start slave;開始同步,sql語句如下:
1
|
START SLAVE;
|
開始同步之后,查看一下同步狀態,sql如下,看下圖可以看到已經開始運行了。
1
|
show slave status \G; #查看salve的狀態
|
6、測試是否可以同步,先在master上創建一個數據庫,再去slave節點上找這個數據庫。
下面是同步完之后的
至此測試結束,主從配置完成,快去試試吧。