在自己操作讀寫分離之前感覺應該不難,操作之中也確實不能,但是裏面都是坑,一下我主要記錄一下我做的時候遇到的那些坑。
1、準備好mysql安裝包,請按照:https://www.jianshu.com/p/ea4accd7afb4 連接中的安裝方式進行安裝。安裝完畢並修改完密碼,順便將data文件夾中的auto.cnf刪除。
2、將安裝好的賦值一份並修改名字。並按照下圖將my.ini修改,同事刪除清空data文件夾
3、如果兩個服務都啓動就算第一步結束了,可以配置讀寫分離,若兩個服務起不來,那麼按以下操作:
刪除安裝的mysql程序(安裝包不要刪除)。其中包括註冊表信息和服務
刪除註冊表 :windows+R 輸入regedit
刪除:HKEY_LOCAL_MACHINE>SYSTEM>ControlSet001>Services>mysql
刪除:HKEY_LOCAL_MACHINE>SYSTEM>CurrentControlSet>Services>mysql
刪除服務:
windows+R 輸入 cmd
命令窗口輸入:sc delete 服務的名字
截止位置算是清空了所有mysql程序。在次進行安裝並複製一份。
複製中的坑:my.ini裏面的內容:請複製
主庫的配置:
[Client] #設置3306端口 port = 3306 [mysqld] #設置3306端口 port = 3306 # 設置mysql的安裝目錄 basedir=F:\mysql-5.7.25-winx64 # 設置mysql數據庫的數據的存放目錄 datadir=F:\mysql-5.7.25-winx64\data # 允許最大連接數 max_connections=200 # 服務端使用的字符集默認爲8比特編碼的latin1字符集 character-set-server=utf8 # 創建新表時將使用的默認存儲引擎 default-storage-engine=INNODB sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES [mysql] # 設置mysql客戶端默認字符集 default-character-set=utf8 [mysqld] #開啓日誌 log-bin=mysql-bin #設置服務id,主從不能一致 server-id=1 #設置需要同步的數據庫 binlog-do-db=pawn #屏蔽系統庫同步 binlog-ignore-db=mysql binlog-ignore-db=information_schema binlog-ignore-db=performance_schema
從庫的配置:
[Client] #設置3306端口 port = 3308 [mysqld] #設置3306端口 port = 3308 # 設置mysql的安裝目錄 basedir=F:\mysql-5.7.25-winx64-fk # 設置mysql數據庫的數據的存放目錄 datadir=F:\mysql-5.7.25-winx64-fk\data # 允許最大連接數 max_connections=200 # 服務端使用的字符集默認爲8比特編碼的latin1字符集 character-set-server=utf8 # 創建新表時將使用的默認存儲引擎 default-storage-engine=INNODB sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES [mysql] # 設置mysql客戶端默認字符集 default-character-set=utf8 [mysqld] #開啓日誌 log-bin=mysql-bin #設置服務id,主從不能一致 server-id=2 #設置需要同步的數據庫 replicate_wild_do_table=pawn.% #屏蔽系統庫同步 replicate_wild_ignore_table=mysql.% replicate_wild_ignore_table=information_schema.% replicate_wild_ignore_table=performance_schema.%
此時,你的主庫可以啓動服務,但是從庫缺少啓動服務入口,使用下面的命令
命令窗口進入從庫中bin文件夾下,執行命令:mysqld install 服務名字 --defaults-file="my.ini的絕對路徑";
此時進入"管理"中會發現你的從庫服務,先別急着啓動,你還要清空data文件夾(你自己的數據庫的所有信息,裏面以前有數據的話先備份)中的內容。
如果此時主庫和從庫都已經可以訪問,那麼需要使用sql語句進行主從關聯
主庫中執行:
-- 主庫授權
#授權主備複製專用賬號
GRANT REPLICATION SLAVE ON *.* TO 'db_sync'@'%' IDENTIFIED BY 'db_sync';
#刷新權限
FLUSH PRIVILEGES;
#確認位點 記錄下文件名以及位點
show master status;
從庫中執行:
STOP SLAVE;
CHANGE MASTER TO master_host = 'localhost', master_user = 'db_sync', master_password = 'db_sync', master_log_file = 'mysql‐bin.000002', master_log_pos = 154;
START SLAVE;
show slave status;
完成後,如果執行完畢你需要關注
從庫中一下狀態是否與主庫一直,並且slave_IO_running slave_sql_running 是否是 Yes ,如果都沒問題(主從庫中my.ini中的同步數據確認好,主庫和從庫一定是提前創建好表),那麼你就可以再主庫中插入數據啦,刷新從庫是否同步。