第一步,在Linux下docker下安裝mysql
我這里用兩臺服務器一臺做主 一臺做從(兩個服務器安裝mysql一樣,重復一下操作即可)
一、在docker上拉取mysql(默認安裝最新版本)
docker pull mysql
二、啟動mysql容器
docker run -it --rm --name mysql -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 -d mysql
我是在主從資料庫分別創建了兩個資料庫

第二步,在主資料庫配置相關主從配置
一.通過容器進入mysql組態檔進行編輯,

[root@VM-4-5-centos ~]# docker exec -it mysql-1.0.0 /bin/bash
root@e35b5eebe9d4:/# cd /etc/mysql
root@e35b5eebe9d4:/etc/mysql# ls
conf.d my.cnf my.cnf.fallback
root@e35b5eebe9d4:/etc/mysql# vi my.cnf
(注:容器下可能不識別 vim命令 可用 以下兩個命令依次安裝)
root@e35b5eebe9d4:/etc/mysql# apt-get update
root@e35b5eebe9d4:/etc/mysql# apt-get install vim
二.進入my.cnf 修改配置
!includedir /etc/mysql/conf.d/
#server-id給資料庫服務的唯一標識
server-id=1
##
###log-bin設定此引數表示啟用binlog功能,并指定路徑名稱
log-bin=/var/lib/mysql/mysql-bin
sync_binlog=0
###設定日志的過期天數
expire_logs_days=7
binlog-do-db=cool
binlog-do-db=cool2
binlog-ignore-db=information_schema
binlog-ignore-db=sys
binlog-ignore-db=mysql
binlog-ignore-db=performance_schema
(注:將上面的代發添加到組態檔,注意 service-id 主從資料庫都需唯一 binlog-do-db 配置需要主從的資料庫,binlog-ignore-db 表示需要忽略掉的資料庫)
然后重啟mysql
第三步.主庫賦予從庫權限賬號,允許用戶在主庫上讀取日志,賦予Slave機器有File權限和REPLICATION SLAVE的權限,
進入mysql控制臺
mysql> create user 'root'@'1.117.183.xxx' identified by '密碼';
mysql> grant FILE on *.* to 'root'@'1.117.183.xxx';
mysql> grant replication slave on *.* to 'root'@'1.117.183.xxx';
mysql> flush privileges;
注: 這里還有兩個坑 一個是需要注意下最新的mysql 需要先創建用戶再授權 否則mysql命令會報錯,
另一個需要修改從庫用戶(新創建的用戶)的密碼解碼方式否則在從庫資料庫會連不上主資料庫,
SELECT plugin FROM `user` where user = 'root';
ALTER USER 'root'@'1.117.183.xxx' IDENTIFIED WITH mysql_native_password BY 'root';
然后重啟mysql,登錄mysql,查看主庫資訊

注:File 和Positon 需要記錄下 配置從庫資料庫需要用到
第四步.配置從庫(進入組態檔的步驟一樣)
一.修改組態檔
log-bin=mysql-bin
server-id=3
binlog-ignore-db=information_schema
binlog-ignore-db=sys
binlog-ignore-db=mysql
replicate-do-db=cool
replicate-do-db=cool2
replicate-ignore-db=mysql
log-slave-updates
slave-skip-errors=all
slave-net-timeout=607
二.進入mysql控制臺,配置主庫節點資訊,
mysql> stop slave;
mysql> change master to master_host='1.116.157.xxx',master_port=3307,master_user='root',master_password='密碼',master_log_file='mysql-bin.000003', master_log_pos=156;
mysql> start slave;
注意:上面的master_log_file是在Master中show master status顯示的File,
而master_log_pos是在Master中show master status顯示的Position,
mysql> show slave status \G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for source to send event
Master_Host: 1.116.157.xxx
Master_User: root
Master_Port: 3307
Connect_Retry: 60
Master_Log_File: mysql-bin.000003
Read_Master_Log_Pos: 719
Relay_Log_File: 1122eacb5941-relay-bin.000005
Relay_Log_Pos: 934
Relay_Master_Log_File: mysql-bin.000003
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB: cool,cool2
Replicate_Ignore_DB: mysql
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: 719
Relay_Log_Space: 1571
Until_Condition: None
注:這兩個Slave_IO_Running,Slave_SQL_Running都是yes 表示配置已經成功
效果 :


轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/397532.html
標籤:其他
