ubuntu mysql混合开发_mysql5.7主从同步 ubuntu
實現環境:
| System | mysql ? |? ip ? |
|主ubuntu | mysql-5.7.24? ?| 10.192.209.122 |
|從ubuntu ? ?|?mysql-5.7.39? ?| 10.192.209.43? ?|
注:從服務器的mysql版本最好和主服務器相同,或者大于主服務器版本
MySQL主從同步的實現部分:
首先是Master(主節點)的配置:
#主Master服務器配置-----------------------------------------------------------------------------------------------------------------------
1.停掉slave端數據庫服務
/etc/init.d/mysql stop
或者service mysqld stop
2.修改配置文件:
sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf
1.主數據庫(Master)配置:
#***********************************master my.cnf配置開始******************************
#主庫日志記錄文件位置或名稱前綴
log_bin = /var/lib/mysql/mylog-bin.log
#同步日志記錄的頻率,1為每條都記錄,安全但效率低
sync_binlog = 1
#server的id,不能與相同id的mysql主從連接
server-id=1
#同步數據庫,如果多庫,就以此格式另寫幾行即可
binlog-do-db=test
#無需同步的數據庫,以下幾行基本一樣,無需改動
binlog-ignore-db = cluster
binlog-ignore-db = mysql
binlog-ignore-db = performance_schema
binlog-ignore-db = information_schema
#mysql復制模式,三種:SBR(基于sql語句復制),RBR(基于行的復制),MBR(混合模式復制)
#混合模式復制
binlog_format=MIXED
#binlog過期清理時間
expire_logs_days=7
#binlog每個日志文件大小
max_binlog_size=20M
#*********************master my.conf配置文件結束*****************************************
binlog_do_db ? ? ? ? ? ?= your databasename(需要主從同步的數據庫)
log-slave-updates=1 ? ?#事件自動更新到日志中
sync_binlog=1 ? ? ? ? ?#日志文件同步到磁盤上
2.登陸mysql執行
mysql -u root -p
mysql> show master status;
+------------------+----------+--------------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------------+------------------+-------------------+
| mysql-bin.000006 | 787 | weblinux_scheduler | | |
+------------------+----------+--------------------+------------------+-------------------+
1 row in set (0.01 sec)
這個File:mysql-bin.000006 和Position787一會兒要在從庫用到
注意:每次修改數據時這兩個值都會改變,所以在查看了這兩個值之后,不要操作主服務器、直接到從服務器配置完成之后,否則這個值對應不上會同步失敗
3.重啟mysql服務,mysql命令行執行:
show master status;#記錄文件名以及緊跟的當前行數數字
4.創建并授權用戶,后兩個slave分別是用戶名和密碼
注意:此處ip是slave端的ip,非本機ip,本人因為這個錯誤浪費好多時間。
grant replication slave ,replication client on *.* to slave@'10.192.209.43' identified by "slave";
flush privileges; #權限修改立即生效
flush tables with read lock; #鎖定數據庫為只讀,確保備份數據一致性
5.退出mysql命令行,執行備份命令
#備份當前所有數據庫,可以參考備份單庫
mysqldump -u root -p --all-databases --master-data > mysql_bak.sql
#從服務器的配置-----------------------------------------------------------------------------------------------------------------------
1.停掉slave端數據庫服務
service mysql stop
2.修改配置文件:
sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf
#從數據庫(Slave)配置:
#***********************************slave my.cnf配置開始******************************
#從庫日志記錄文件位置或名稱前綴
log_bin = /var/lib/mysql/mylog-bin.log
#同步日志記錄的頻率,1為每條都記錄,安全但效率低
sync_binlog = 1
#server的id,不能與相同id的mysql主從連接
server-id=2
#從庫日志忽略的數據庫名稱,不記錄
#這里記錄從庫的binlog是為了安全,如果覺得沒必要,可以去掉從庫binlog的配置
binlog-ignore-db = cluster
binlog-ignore-db = mysql
binlog-ignore-db = performance_schema
binlog-ignore-db = information_schema
#此處添加需要同步的數據庫名稱,那么它會只接收這個數據庫的信息,多個數據庫需同步按照此格式另寫幾行即可
#這里同步數據有兩種思路,一種是主服務器只發從庫需要的,在主庫指定;一種是主服務器把所有數據同步過來,從庫按需過濾接收
#為了讓配置更詳細些,此處配置了從庫過濾接收的配置
replicate-do-db=test
#忽略接收的庫名
replicate-ignore-db = cluster
replicate-ignore-db = mysql
replicate-ignore-db = performance_schema
replicate-ignore-db = information_schema
#跳過所有錯誤繼續
slave-skip-errors=all
#設置延時時間
slave-net-timeout=60
#mysql復制模式,三種:SBR(基于sql語句復制),RBR(基于行的復制),MBR(混合模式復制)
binlog_format=MIXED #混合模式復制
expire_logs_days=7 #binlog過期清理時間
max_binlog_size=20M #binlog每個日志文件大小
#***********************************slave my.cnf配置結束******************************
3.保存退出:wq
4.啟動mysqld服務
/etc/init.d/mysql start
或service mysqld start
5.導入主服務器數據庫備份的數據
mysqldump -u root -p your databasename < ~/mysql_bak.sql
source mysql_bak.sql(如果你的數據庫是新建的要用這條命令,我執行上面的命令始終沒成功,又浪費了很多時間)
6.在從服務器slave端的mysql>指定master端的相關參數(登陸mysql后執行)
mysql>CHANGE MASTER TO
MASTER_HOST='10.192.209.122',
MASTER_PORT=3307,
MASTER_USER='slave',
MASTER_PASSWORD='slave',
MASTER_LOG_FILE='mysql-bin.000006',
MASTER_LOG_POS=787;
注:最后兩行是之前在主服務器show master status 所記錄的數據
如果之前已經啟動了一個slave進程,那么以上的命令會失效,并提示stop slave first,所以先stop slave; 然后重試
7.啟動slave
start slave;
show slave status\G #注意,沒有分號
輸出如下,顯示兩個都為yes即成功,可以測試一下
mysql> show slave status;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 10.192.209.122
Master_User: replication
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000006
Read_Master_Log_Pos: 787
Relay_Log_File: mysql-relay-log.000004
Relay_Log_Pos: 441
Relay_Master_Log_File: mysql-bin.000001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 52360
Relay_Log_Space: 597
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 1
"""
----------此處執行從服務器相關配置全部完成再執行下面2步--------
6.從服務器啟動slave(前提是配置好從服務器)
7.從服務器啟動完畢后關閉表鎖
unlock tables;
#從服務器的配置-----------------------------------------------------------------------------------------------------------------------
有時要清除從庫的所有復制信息,如切換為不同的Master, 主從重做等;Reset slave是一個比較危險的命令,所以在執行前一定要準備知道其含義。
1. 命令在slave上執行,執行前一定要停掉slave(stop slave)
2. 執行reset slave后,會清除復制相關的所有信息,包括:master.info, relay-log.info, 及無條件刪除所有的中繼日志(relay logs). 注意是無條件的,也就是不管理你Slave SQL線程是否把所有的relay log重放完了。
3. 注意,stop slave后,先保存show slave status信息,然后再執行reset slave. 一般這個信息都會有用的。
總結
以上是生活随笔為你收集整理的ubuntu mysql混合开发_mysql5.7主从同步 ubuntu的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java同步读写,关于java:Coll
- 下一篇: LaTeX数学符号