1)安裝mysql ubuntu中安裝一臺mysql了,docker安裝另外一臺mysql 獲取mysql的鏡像,主從同步儘量保證多台mysql的版本相同,我的ubuntu中存在的mysql是5.7.22版本,所以獲取5.7.22版本的鏡像為例: 運行mysql docker鏡像,需要在宿主機中建立 ...
1)安裝mysql
ubuntu中安裝一臺mysql了,docker安裝另外一臺mysql
獲取mysql的鏡像,主從同步儘量保證多台mysql的版本相同,我的ubuntu中存在的mysql是5.7.22版本,所以獲取5.7.22版本的鏡像為例:
docker image pull mysql:5.7.22
或
docker load -i mysql_docker_5722.tar
運行mysql docker鏡像,需要在宿主機中建立文件目錄用於mysql容器保存數據和讀取配置文件。
在家目錄中(/home/python)中創建目錄,將mysql的配置文件放到此目錄中
cd ~
mkdir mysql_slave
cd mysql_slave
mkdir data
cp /etc/mysql/mysql.conf.d ./
將docker運行的mysql作為slave來運行,開啟前需要修改配置文件。
編輯 ~/mysql_slave/mysql.conf.d/mysqld.cnf 文件,修改
port = 8306
general_log = 0
server-id = 2
讓此台mysql運行在8306埠上,且mysql編號為2
創建docker容器
docker run --name mysql-slave -e MYSQL_ROOT_PASSWORD=mysql -d --network=host -v /home/python/mysql_slave/data:/var/lib/mysql -v /home/python/mysql_slave/mysql.conf.d:/etc/mysql/mysql.conf.d mysql:5.7.22
- MYSQL_ROOT_PASSWORD 是創建mysql root用戶的密碼
測試,在ubuntu中使用mysql命令嘗試連接docker容器中的mysql
mysql -uroot -pmysql -h 127.0.0.1 --port=8306
2)備份主伺服器原有數據到從伺服器
如果在設置主從同步前,主伺服器上已有大量數據,可以使用mysqldump進行數據備份並還原到從伺服器以實現數據的複製。
在主伺服器Ubuntu上進行備份,執行命令:
mysqldump -uroot -pmysql --all-databases --lock-all-tables > ~/master_db.sql
-
-u :用戶名
-
-p :示密碼
-
--all-databases :導出所有資料庫
-
--lock-all-tables :執行操作時鎖住所有表,防止操作時有數據修改
-
~/master_db.sql :導出的備份數據(sql文件)位置,可自己指定
在docker容器中導入數據
mysql -uroot -pmysql -h127.0.0.1 --port=8306 < ~/master_db.sql
3)配置主伺服器master(Ubuntu中的MySQL)
編輯設置mysqld的配置文件,設置log_bin和server-id
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
重啟mysql服務
sudo service mysql restart
登入主伺服器Ubuntu中的mysql,創建用於從伺服器同步數據使用的帳號
mysql –uroot –pmysql
GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' identified by 'slave';
FLUSH PRIVILEGES;
獲取主伺服器的二進位日誌信息
SHOW MASTER STATUS;
File為使用的日誌文件名字,Position為使用的文件位置,這兩個參數須記下,配置從伺服器時會用到。
4)配置從伺服器slave (docker中的mysql)
進入docker中的mysql
mysql -uroot -pmysql -h 127.0.0.1 --port=8306
執行
change master to master_host='127.0.0.1', master_user='slave', master_password='slave',master_log_file='mysql-bin.000006', master_log_pos=590;
- master_host:主伺服器Ubuntu的ip地址
- master_log_file: 前面查詢到的主伺服器日誌文件名
- master_log_pos: 前面查詢到的主伺服器日誌文件位置
啟動slave伺服器,並查看同步狀態
start slave;
show slave status \G