ubuntu mysql混合开发_mysql5.7主从同步 ubuntu
實(shí)現(xiàn)環(huán)境:
| System | mysql ? |? ip ? |
|主ubuntu | mysql-5.7.24? ?| 10.192.209.122 |
|從ubuntu ? ?|?mysql-5.7.39? ?| 10.192.209.43? ?|
注:從服務(wù)器的mysql版本最好和主服務(wù)器相同,或者大于主服務(wù)器版本
MySQL主從同步的實(shí)現(xiàn)部分:
首先是Master(主節(jié)點(diǎn))的配置:
#主Master服務(wù)器配置-----------------------------------------------------------------------------------------------------------------------
1.停掉slave端數(shù)據(jù)庫(kù)服務(wù)
/etc/init.d/mysql stop
或者service mysqld stop
2.修改配置文件:
sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf
1.主數(shù)據(jù)庫(kù)(Master)配置:
#***********************************master my.cnf配置開(kāi)始******************************
#主庫(kù)日志記錄文件位置或名稱前綴
log_bin = /var/lib/mysql/mylog-bin.log
#同步日志記錄的頻率,1為每條都記錄,安全但效率低
sync_binlog = 1
#server的id,不能與相同id的mysql主從連接
server-id=1
#同步數(shù)據(jù)庫(kù),如果多庫(kù),就以此格式另寫(xiě)幾行即可
binlog-do-db=test
#無(wú)需同步的數(shù)據(jù)庫(kù),以下幾行基本一樣,無(wú)需改動(dòng)
binlog-ignore-db = cluster
binlog-ignore-db = mysql
binlog-ignore-db = performance_schema
binlog-ignore-db = information_schema
#mysql復(fù)制模式,三種:SBR(基于sql語(yǔ)句復(fù)制),RBR(基于行的復(fù)制),MBR(混合模式復(fù)制)
#混合模式復(fù)制
binlog_format=MIXED
#binlog過(guò)期清理時(shí)間
expire_logs_days=7
#binlog每個(gè)日志文件大小
max_binlog_size=20M
#*********************master my.conf配置文件結(jié)束*****************************************
binlog_do_db ? ? ? ? ? ?= your databasename(需要主從同步的數(shù)據(jù)庫(kù))
log-slave-updates=1 ? ?#事件自動(dòng)更新到日志中
sync_binlog=1 ? ? ? ? ?#日志文件同步到磁盤上
2.登陸mysql執(zhí)行
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)
這個(gè)File:mysql-bin.000006 和Position787一會(huì)兒要在從庫(kù)用到
注意:每次修改數(shù)據(jù)時(shí)這兩個(gè)值都會(huì)改變,所以在查看了這兩個(gè)值之后,不要操作主服務(wù)器、直接到從服務(wù)器配置完成之后,否則這個(gè)值對(duì)應(yīng)不上會(huì)同步失敗
3.重啟mysql服務(wù),mysql命令行執(zhí)行:
show master status;#記錄文件名以及緊跟的當(dāng)前行數(shù)數(shù)字
4.創(chuàng)建并授權(quán)用戶,后兩個(gè)slave分別是用戶名和密碼
注意:此處ip是slave端的ip,非本機(jī)ip,本人因?yàn)檫@個(gè)錯(cuò)誤浪費(fèi)好多時(shí)間。
grant replication slave ,replication client on *.* to slave@'10.192.209.43' identified by "slave";
flush privileges; #權(quán)限修改立即生效
flush tables with read lock; #鎖定數(shù)據(jù)庫(kù)為只讀,確保備份數(shù)據(jù)一致性
5.退出mysql命令行,執(zhí)行備份命令
#備份當(dāng)前所有數(shù)據(jù)庫(kù),可以參考備份單庫(kù)
mysqldump -u root -p --all-databases --master-data > mysql_bak.sql
#從服務(wù)器的配置-----------------------------------------------------------------------------------------------------------------------
1.停掉slave端數(shù)據(jù)庫(kù)服務(wù)
service mysql stop
2.修改配置文件:
sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf
#從數(shù)據(jù)庫(kù)(Slave)配置:
#***********************************slave my.cnf配置開(kāi)始******************************
#從庫(kù)日志記錄文件位置或名稱前綴
log_bin = /var/lib/mysql/mylog-bin.log
#同步日志記錄的頻率,1為每條都記錄,安全但效率低
sync_binlog = 1
#server的id,不能與相同id的mysql主從連接
server-id=2
#從庫(kù)日志忽略的數(shù)據(jù)庫(kù)名稱,不記錄
#這里記錄從庫(kù)的binlog是為了安全,如果覺(jué)得沒(méi)必要,可以去掉從庫(kù)binlog的配置
binlog-ignore-db = cluster
binlog-ignore-db = mysql
binlog-ignore-db = performance_schema
binlog-ignore-db = information_schema
#此處添加需要同步的數(shù)據(jù)庫(kù)名稱,那么它會(huì)只接收這個(gè)數(shù)據(jù)庫(kù)的信息,多個(gè)數(shù)據(jù)庫(kù)需同步按照此格式另寫(xiě)幾行即可
#這里同步數(shù)據(jù)有兩種思路,一種是主服務(wù)器只發(fā)從庫(kù)需要的,在主庫(kù)指定;一種是主服務(wù)器把所有數(shù)據(jù)同步過(guò)來(lái),從庫(kù)按需過(guò)濾接收
#為了讓配置更詳細(xì)些,此處配置了從庫(kù)過(guò)濾接收的配置
replicate-do-db=test
#忽略接收的庫(kù)名
replicate-ignore-db = cluster
replicate-ignore-db = mysql
replicate-ignore-db = performance_schema
replicate-ignore-db = information_schema
#跳過(guò)所有錯(cuò)誤繼續(xù)
slave-skip-errors=all
#設(shè)置延時(shí)時(shí)間
slave-net-timeout=60
#mysql復(fù)制模式,三種:SBR(基于sql語(yǔ)句復(fù)制),RBR(基于行的復(fù)制),MBR(混合模式復(fù)制)
binlog_format=MIXED #混合模式復(fù)制
expire_logs_days=7 #binlog過(guò)期清理時(shí)間
max_binlog_size=20M #binlog每個(gè)日志文件大小
#***********************************slave my.cnf配置結(jié)束******************************
3.保存退出:wq
4.啟動(dòng)mysqld服務(wù)
/etc/init.d/mysql start
或service mysqld start
5.導(dǎo)入主服務(wù)器數(shù)據(jù)庫(kù)備份的數(shù)據(jù)
mysqldump -u root -p your databasename < ~/mysql_bak.sql
source mysql_bak.sql(如果你的數(shù)據(jù)庫(kù)是新建的要用這條命令,我執(zhí)行上面的命令始終沒(méi)成功,又浪費(fèi)了很多時(shí)間)
6.在從服務(wù)器slave端的mysql>指定master端的相關(guān)參數(shù)(登陸mysql后執(zhí)行)
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;
注:最后兩行是之前在主服務(wù)器show master status 所記錄的數(shù)據(jù)
如果之前已經(jīng)啟動(dòng)了一個(gè)slave進(jìn)程,那么以上的命令會(huì)失效,并提示stop slave first,所以先stop slave; 然后重試
7.啟動(dòng)slave
start slave;
show slave status\G #注意,沒(méi)有分號(hào)
輸出如下,顯示兩個(gè)都為yes即成功,可以測(cè)試一下
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
"""
----------此處執(zhí)行從服務(wù)器相關(guān)配置全部完成再執(zhí)行下面2步--------
6.從服務(wù)器啟動(dòng)slave(前提是配置好從服務(wù)器)
7.從服務(wù)器啟動(dòng)完畢后關(guān)閉表鎖
unlock tables;
#從服務(wù)器的配置-----------------------------------------------------------------------------------------------------------------------
有時(shí)要清除從庫(kù)的所有復(fù)制信息,如切換為不同的Master, 主從重做等;Reset slave是一個(gè)比較危險(xiǎn)的命令,所以在執(zhí)行前一定要準(zhǔn)備知道其含義。
1. 命令在slave上執(zhí)行,執(zhí)行前一定要停掉slave(stop slave)
2. 執(zhí)行reset slave后,會(huì)清除復(fù)制相關(guān)的所有信息,包括:master.info, relay-log.info, 及無(wú)條件刪除所有的中繼日志(relay logs). 注意是無(wú)條件的,也就是不管理你Slave SQL線程是否把所有的relay log重放完了。
3. 注意,stop slave后,先保存show slave status信息,然后再執(zhí)行reset slave. 一般這個(gè)信息都會(huì)有用的。
總結(jié)
以上是生活随笔為你收集整理的ubuntu mysql混合开发_mysql5.7主从同步 ubuntu的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: java同步读写,关于java:Coll
- 下一篇: Qt SQL 学习笔记二:qt建立数据库