mysql 主從同步配置【學習記錄】

本文的兩個mysql數據庫均在單機配置html

若是是在centos 上使用docker上線mysql主從,參考這篇文章:http://www.javashuo.com/article/p-solfkode-z.htmlmysql

1. 首先準備兩個mysql服務端文件,目錄分別爲:sql

D:\software\mysql-5.7.26-winx64-master
D:\software\mysql-5.7.26-winx64-slave

2. 配置master的my.ini文件(若是沒有則新建):docker

[mysqld]
port = 3306
basedir = D:\\software\\mysql-5.7.26-winx64-master
datadir = D:\\software\\mysql-5.7.26-winx64-master\\data

#生成記錄文件位置,同步必須,請勿手動刪除,格式位置爲 :log-bin=mysql安裝路徑/log/mysql-bin.log
log-bin=D:\\software\\mysql-5.7.26-winx64-master\\log\\bin-log
#服務ID,用於區分服務,範圍1~2^32-1,須要與從服務器不一樣
server_id= 1
#MySQL 磁盤寫入策略以及數據安全性
#每次事務提交時MySQL都會把log buffer的數據寫入log file,而且flush(刷到磁盤)中去
innodb_flush_log_at_trx_commit=1

#當sync_binlog =N (N>0) ,MySQL 在每寫 N次 二進制日誌binary log時,會使用fdatasync()函數將它的寫二進制日誌binary log同步到磁盤中去。
#sync_binlog 的默認值是0,像操做系統刷其餘文件的機制同樣,MySQL不會同步到磁盤中去而是依賴操做系統來刷新binary log。
sync_binlog= 1
#此處添加須要同步的數據庫名稱,那麼它會只接收這個數據庫的信息,多個數據庫需同步按照此格式另寫幾行便可
#這裏同步數據有兩種思路,一種是主服務器只發從庫須要的,在主庫指定;一種是主服務器把全部數據同步過來,從庫按需過濾接收
#爲了讓配置更詳細些,此處配置了從庫過濾接收的配置
binlog-do-db=test

#mysql複製模式,三種:SBR(基於sql語句複製),RBR(基於行的複製),MBR(混合模式複製)
#混合模式複製
binlog_format=MIXED
#binlog過時清理時間
expire_logs_days=7
#binlog每一個日誌文件大小
max_binlog_size=20M

3. 配置slave的my.ini文件:數據庫

[mysqld]
port = 3306
basedir = D:\\software\\mysql-5.7.26-winx64-slave
datadir = D:\\software\\mysql-5.7.26-winx64-slave\\data

#生成記錄文件位置,同步必須,請勿手動刪除,格式位置爲 :log-bin=mysql安裝路徑/log/mysql-bin.log
log-bin=D:\\software\\mysql-5.7.26-winx64-slave\\log\\bin-log
#服務ID,用於區分服務,範圍1~2^32-1,須要與從服務器不一樣
server_id= 2
#MySQL 磁盤寫入策略以及數據安全性
#每次事務提交時MySQL都會把log buffer的數據寫入log file,而且flush(刷到磁盤)中去
innodb_flush_log_at_trx_commit=1

#當sync_binlog =N (N>0) ,MySQL 在每寫 N次 二進制日誌binary log時,會使用fdatasync()函數將它的寫二進制日誌binary log同步到磁盤中去。
#sync_binlog 的默認值是0,像操做系統刷其餘文件的機制同樣,MySQL不會同步到磁盤中去而是依賴操做系統來刷新binary log。
sync_binlog= 1
#此處添加須要同步的數據庫名稱,那麼它會只接收這個數據庫的信息,多個數據庫需同步按照此格式另寫幾行便可
#這裏同步數據有兩種思路,一種是主服務器只發從庫須要的,在主庫指定;一種是主服務器把全部數據同步過來,從庫按需過濾接收
#爲了讓配置更詳細些,此處配置了從庫過濾接收的配置
replicate-do-db=test

#mysql複製模式,三種:SBR(基於sql語句複製),RBR(基於行的複製),MBR(混合模式複製)
#混合模式複製
binlog_format=MIXED
#binlog過時清理時間
expire_logs_days=7
#binlog每一個日誌文件大小
max_binlog_size=20M

注:二者的區別之處主要在於:centos

  1. server_id須要填寫不一樣值;
  2. 主庫配置爲:binlog-do-db=test
  3. 從庫配置爲:replicate-do-db=hcxs

4. 建立服務(同時指定使用本身的my.ini文件):安全

  1. 建立主庫服務:mysqld --install MySQL_M --defaults-file="D:\software\mysql-5.7.26-winx64-master\my.ini"
  2. 初始化主庫:mysqld --initialize-insecure --user=mysql
  3. 從庫服務:mysqld --install MySQL_S --defaults-file="D:\software\mysql-5.7.26-winx64-slave\my.ini"
  4. 初始化從庫:mysqld --initialize-insecure --user=mysql

5. 啓動服務:服務器

    分別啓動主從數據庫服務:net start MySQL_M、net start MySQL_Sasync

6. 默認密碼爲空,能夠從cmd登陸mysql後修改(mysql -uroot -p),也能夠經過navicat登陸後修改:ide

    修改語句爲:set password = password('123456'); flush privileges;

7. 在主庫建立並受權新帳號,用於從庫使用該帳號拉取binlog(示例建立的user=slave,password=123456):

grant replication slave, replication client on *.* to slave@'192.168.1.128' identified by "123456";
flush privileges;

8. 在從庫執行命令,指定主庫信息:

CHANGE MASTER TO
MASTER_HOST='127.0.0.1',
MASTER_USER='slave',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='bin-log.000002',
MASTER_LOG_POS=1392;

其中MASTER_LOG_FILEMASTER_LOG_POS的值來源於主庫中執行的「show master status」命令的結果:(必定是要在主庫中執行

執行完以後,在從庫執行「show master status」命令,若是結果中的 Slave_IO_Running: Yes  且  Slave_SQL_Running: Yes,則表明主從配置已經成功!!

不然,若是其中任一一個爲No,則未成功,能夠參考這篇文章的解決方案:https://blog.csdn.net/heng_ji/article/details/51013710

主從同步原理,能夠參考這篇文章:http://www.javashuo.com/article/p-ullujmvv-gb.html

至此,mysql主從同步配置就所有完成!!

相關文章
相關標籤/搜索