1. 程式人生 > 其它 >mysql 主從資料庫配置

mysql 主從資料庫配置

主從資料庫配置方法

將之前的mysql主從配置整理了一下放到部落格上,方便下次使用

1)安裝mysql

我們在ubuntu中已經有安裝一臺mysql了,現在使用docker安裝另外一臺mysql

獲取mysql的映象,主從同步儘量保證多臺mysql的版本相同

sudo docker image pull mysql:5.7.22  # 5.7.22是版本號,保持mysql版本相同
或
sudo 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 ./ -r

我們要將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 -p -h 127.0.0.1 --port=8306

2)備份主伺服器原有資料到從伺服器

如果在設定主從同步前,主伺服器上已有大量資料,可以使用mysqldump進行資料備份並還原到從伺服器以實現資料的複製。

在主伺服器Ubuntu上進行備份,執行命令:

mysqldump -uroot -p --all-databases --lock-all-tables > ~/master_db.sql

  • -u :使用者名稱
  • -p :示密碼
  • --all-databases :匯出所有資料庫
  • --lock-all-tables :執行操作時鎖住所有表,防止操作時有資料修改
  • ~/master_db.sql :匯出的備份資料(sql檔案)位置,可自己指定

在docker容器中匯入資料

mysql -uroot -p -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 –p

GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' identified by 'slave';

FLUSH PRIVILEGES;

獲取主伺服器的二進位制日誌資訊

SHOW MASTER STATUS;

File為使用的日誌檔名字,Position為使用的檔案位置,這兩個引數須記下,配置從伺服器時會用到。

4)配置從伺服器slave (docker中的mysql)

進入docker中的mysql

mysql -uroot -p -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_log_pos 為查詢出來的Position
#master_lof_file 為查詢出來的file
  • master_host:主伺服器Ubuntu的ip地址
  • master_log_file: 前面查詢到的主伺服器日誌檔名
  • master_log_pos: 前面查詢到的主伺服器日誌檔案位置

啟動slave伺服器,並檢視同步狀態

start slave;
show slave status \G