通過Docker安裝配置Mysql主從節點


  • 以下docker相關的命令,需要在root用戶環境下或通過sudo提升權限來進行操作。

1.拉取Mysql5.7.15鏡像到本地

docker pull mysql:5.7.15

# 如果只需要跑一個mysql實例,不做主從,那么執行以下命令即可,不用再做后面的參考步驟:
docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -v ~/test/mysql/data:/var/lib/mysql mysql:5.7.15

# 然后用Shell或客戶端軟件通過配置(用戶名: root 密碼: 123456 IP:你的本機IP 端口:3306)來登陸

2. 准備MYSQL配置文件

  • mysql5.7.15安裝后的默認配置文件在/etc/mysql/my.cnf

  • 自定義的配置文件一般在/etc/mysql/conf.d路徑下

  • 創建/test/mysql/master/conf/my.cnf和/test/mysql/slave/conf/my.cnf 文件

  • 用於配置主從:
    ~/test/mysql/master/conf/my.cnf

[mysqld]
server_id = 1
log-bin= mysql-bin
read-only=0

replicate-ignore-db=mysql
replicate-ignore-db=sys
replicate-ignore-db=information_schema
replicate-ignore-db=performance_schema

!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mysql.conf.d/

~/test/mysql/slave/conf/my.cnf

[mysqld]
server_id = 2
log-bin= mysql-bin
read-only=1

replicate-ignore-db=mysql
replicate-ignore-db=sys
replicate-ignore-db=information_schema
replicate-ignore-db=performance_schema

!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mysql.conf.d/

3.Docker分別運行Mysql 主/從兩個容器

  • 將mysql主節點運行起來
mkdir -p ~/test/mysql/master/data
docker run --name mysql-master -d -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456 -v ~/test/mysql/master/data:/var/lib/mysql -v ~/test/mysql/master/conf/my.cnf:/etc/mysql/my.cnf mysql:5.7.15
  • 運行參數說明
docker run -d 
--name mysql-master // 容器的名稱設為mysql-master
-p 3307:3306 // 將host的3307端口映射到容器的3306端口
-v ~/test/mysql/master/conf/my.cnf:/etc/mysql/my.cnf //配置文件掛載
-v ~/test/mysql/master/data:/var/lib/mysql // mysql容器內數據掛載到host的/data/mysql/data_master,用於持久化
-e MYSQL_ROOT_PASSWORD=123456 mysql:5.7.15  // mysql的root登陸密碼為123456
  • 將mysql從節點運行起來
mkdir -p ~/test/mysql/slave/data
docker run --name mysql-slave -d -p 3308:3306 -e MYSQL_ROOT_PASSWORD=123456 -v ~/test/mysql/slave/data:/var/lib/mysql -v ~/test/mysql/slave/conf/my.cnf:/etc/mysql/my.cnf mysql:5.7.15

4.登陸MYSQL主節點配置同步信息

  • 登陸mysql
# 方式一:192.168.1.xx 是你本機的內網ip
mysql -u root -h 192.168.1.xx -P3307 -p123456

# 方式二:進入docker設置:
docker exec -it mysql-master bash
mysql -u root -p123456
  • 在mysql client中執行
mysql > grant replication slave on *.* to 'slave'@'%' identified by '123456';
mysql > flush privileges;
  • 獲取status
mysql> show master status\G;
*************************** 1. row ***************************
             File: mysql-bin.000003
         Position: 582
     Binlog_Do_DB: 
 Binlog_Ignore_DB: 
Executed_Gtid_Set: 
1 row in set (0.00 sec)

5.登陸MYSQL從節點配置同步信息

  • 登陸mysql
# 192.168.1.xx 是你本機的內網ip
mysql -u root -h 192.168.1.xx -P3308 -p123456
  • 在mysql client中執行
mysql > change master to master_host='192.168.1.xx',master_port=3307,master_user='slave',master_password='123456',master_log_file='mysql-bin.000003',master_log_pos=0;

mysql > start slave;
  • 獲取status,得到類似如下的輸出:
mysql> show slave status\G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.1.xx
                  Master_User: slave
                  Master_Port: 3307
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000003
          Read_Master_Log_Pos: 582
               Relay_Log_File: 4254044df25b-relay-bin.000002
                Relay_Log_Pos: 795
        Relay_Master_Log_File: mysql-bin.000003
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
...
  • 可以嘗試在主mysql中新建數據庫里建表操作下,然后在從節點上檢查數據是否已經同步過來。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM