mysql主从搭建
Mysql主從搭建
MySQL數(shù)據(jù)庫自身提供的主從復制功能可以方便的實現(xiàn)數(shù)據(jù)的多處自動備份,實現(xiàn)數(shù)據(jù)庫的拓展。多個數(shù)據(jù)備份不僅可以加強數(shù)據(jù)的安全性,通過實現(xiàn)讀寫分離還能進一步提升數(shù)據(jù)庫的負載性能。
實現(xiàn)思路
實現(xiàn)MySQL主從復制需要進行的配置:主服務(wù)器: 開啟二進制日志 配置唯一的server-id 獲得master二進制日志文件名及位置(Position) 創(chuàng)建一個用于slave和master通信的用戶賬號從服務(wù)器: 配置唯一的server-id 使用master分配的用戶賬號讀取master二進制日志(執(zhí)行sql語句) 啟用slave服務(wù)一、準備工作
1.主從數(shù)據(jù)庫版本最好一致 2.主從數(shù)據(jù)庫內(nèi)數(shù)據(jù)保持一致 主數(shù)據(jù)庫:192.168.1.52 /linux 從數(shù)據(jù)庫:192.168.1.190 /linux二、主數(shù)據(jù)庫master修改
1.修改mysql配置修改配置文件/etc/mysql/my.cnf,在[mysqld]部分插入如下兩行:[mysqld] log-bin=mysql-bin #開啟二進制日志 server-id=1 #設(shè)置server-id2.重啟mysql,創(chuàng)建用于同步的用戶賬號打開mysql會話shell>mysql -hlocalhost -uname -ppassword 創(chuàng)建用戶并授權(quán):用戶:repl密碼:123123grant replication slave on *.* to 'repl'@'192.168.1.52' identified by '123123'; #給用戶repl賦予replication權(quán)限和ip密碼 flush privileges; #重新刷新權(quán)限 flush tables with read lock; #表的讀鎖死 show master status; #讀數(shù)據(jù)狀態(tài)3.查看master狀態(tài)記錄二進制文件名(mysql-bin.000236)和位置(66014): mysql> show master status; +------------------+----------+--------------+------------------+-------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +------------------+----------+--------------+------------------+-------------------+ | mysql-bin.000236 | 66014 | | | | +------------------+----------+--------------+------------------+-------------------+ 1 row in set (0.02 sec)三、從服務(wù)器slave修改
1.修改mysql配置 同樣修改my.cnf配置文件,添加server-id[mysqld]server-id=2 #設(shè)置server-id,必須唯一2.重啟mysql,打開mysql會話,執(zhí)行同步SQL語句 (需要主服務(wù)器主機名,登陸憑據(jù),二進制文件的名稱和位置):mysql> CHANGE MASTER TO-> MASTER_HOST='192.168.1.52',-> MASTER_USER='repl',-> MASTER_PASSWORD='123123',-> MASTER_LOG_FILE='mysql-bin.000236',-> MASTER_LOG_POS=66014; Query OK, 0 rows affected, 2 warnings (0.07 sec)3.啟動slave同步進程:mysql>start slave;4.查看slave狀態(tài):mysql> show slave status\G *************************** 1. row ***************************Slave_IO_State: Waiting for master to send eventMaster_Host: 192.168.1.52Master_User: replMaster_Port: 3306Connect_Retry: 60Master_Log_File: mysql-bin.000236Read_Master_Log_Pos: 106039Relay_Log_File: mysqld-relay-bin.000002Relay_Log_Pos: 40308Relay_Master_Log_File: mysql-bin.000236Slave_IO_Running: YesSlave_SQL_Running: Yes ...當Slave_IO_Running和Slave_SQL_Running都為YES的時候就表示主從同步設(shè)置成功了。
接下來就可以進行一些驗證了。比如在主master數(shù)據(jù)庫的test數(shù)據(jù)庫的一張表中插入一條數(shù)據(jù),在slave的test庫的相同數(shù)據(jù)表中查看是否有新增的數(shù)據(jù)即可驗證主從復制功能是否有效;還可以關(guān)閉slave(mysql>stop slave;),然后再修改master,看slave是否也相應(yīng)修改(停止slave后,master的修改不會同步到slave),就可以完成主從復制功能的驗證了。
其他參數(shù)
還可以用到的其他相關(guān)參數(shù): master開啟二進制日志后默認記錄所有庫所有表的操作, 可以通過配置來指定只記錄指定的數(shù)據(jù)庫甚至指定的表的操作, 具體在mysql配置文件的[mysqld]可添加修改如下選項:# 不同步哪些數(shù)據(jù)庫binlog-ignore-db = mysql binlog-ignore-db = test binlog-ignore-db = information_schema# 只同步哪些數(shù)據(jù)庫,除此之外,其他不同步binlog-do-db = game問題處理
mysql> show slave status\G.......Relay_Log_File: localhost-relay-bin.000535Relay_Log_Pos: 21795072Relay_Master_Log_File: localhost-bin.000094Slave_IO_Running: YesSlave_SQL_Running: NoReplicate_Do_DB: Replicate_Ignore_DB: ......- 解決辦法一
- 解決辦法二
也有可能跟我一樣,沒有執(zhí)行鎖表語句(表的讀鎖死)
因為不會執(zhí)行主從復制前的數(shù)據(jù),需要自己手動復制(執(zhí)行sql導入)
轉(zhuǎn)載于:https://www.cnblogs.com/irockcode/p/8435871.html
總結(jié)
- 上一篇: ThinkPHP---ue编辑器
- 下一篇: MySQL教程(三)—— MySQL的安