1.場景描述
廢話不多說了,簡單記錄下mysql主從庫配置,實現讀寫分離,還可以設置延遲同步,防止誤操作,起到備庫作用。。
2.解決方案
簡單記錄下如何快速對現有mysql庫實現讀寫分離,至於可能遇到的數據不一致等問題,後續再解釋,本次只介紹如何快速對現有mysql做主從庫配置/讀寫分離。
2.1 原理
MySQL主從庫或者讀寫分離配置,其實依靠的mysql自帶二進制日誌。
簡單說就是在主庫上做的動作(增刪改)會全部記錄在主庫中的日誌中,從庫通過查詢主庫(主庫要給權限)日誌,然後照着主庫日誌再從庫上操作一遍,這樣就實現了主從複製。
說明:
兩臺服務器,每個上面一個數據庫,主庫ip:192.168.10.14,從庫ip:192.168.10.16
2.2 主庫設置(192.168.10.14):
(1)root下進入mysql用戶
su - mysql
(2) 修改配置文件my.cnf ,並給從庫設置日誌查詢權限。
vi /etc/my.cnf
server_id =14
log-bin=mysql-bin
binlog_do_db=test
:wq
#軟件老王,重啓mysql
service mysqld restart
創建用戶並賦權:
GRANT replication slave ON *.* TO 'slave'@'%' identified by 'laowang';
(3)查看主庫信息,後續從庫中要配置
通過navicat或者直接連接myql查看下信息(/usr/local/mysql/bin/mysql -uroot -p mysql),後續從庫中要用這個信息
show master status;
2.3 從庫設置(192.168.10.16):
(1)修改/etc/my.cnf
vi /etc/my.cnf
server_id =16
log-bin=mysql-bin
binlog_do_db=test
:wq
#軟件老王,重啓mysql
service mysqld restart
(2)在secureCRT下操作,設置從庫配置。
mysql>stop slave;
mysql>change master to
master_host='192.168.10.14',
master_user='slave',
master_password='laowang',
master_log_file='mysql-bin.000002',
master_log_pos=1236;
mysql>start slave;
mysql> show slave status;
(3)還可以設置延遲同步,以免誤操作主從庫數據都沒有了,如下:延遲3分鐘30分鐘同步。
CHANGE MASTER TO MASTER_DELAY = 1800;單位爲秒
2.4 驗證
(1)分別在主庫(14)和從庫(16)的test數據庫下創建測試表
CREATE TABLE `dfdaf` (
`dfafd` varchar(100) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
(2)對主庫14進行操作,然後查詢從庫16,看是否同步過來了。
I’m 「軟件老王」,如果覺得還可以的話,關注下唄,後續更新秒知!歡迎討論區、同名公衆號留言交流!