MySQLDocker 主從複製搭建

MySQLDocker 主從複製搭建

MySQLDocker 的搭建

docker search mysql

docker pull mysql/mysql-server:8.0.26

docker images

docker run -p 3307:3306 --name mysql8.0 -e MYSQL_ROOT_PASSWORD=root -d mysql/mysql-server:8.0.26

使用客戶端無法連接的問題:

mysql -uroot -p

use mysql;

select host,user,plugin from user;

CREATE USER 'root'@'%' IDENTIFIED BY 'root';
GRANT USAGE ON *.* TO 'root'@'%';
grant all privileges on *.* to 'root'@'%';
UPDATE user SET plugin='mysql_native_password' WHERE User='root' and host='%';
flush privileges;
  • 問題1 :Mysql8的授權寫法發生變更

    image-20211020021501165

    GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;
    -- 語法發生修改如下:
    GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';
    

MySQL 主從同步搭建

  1. 創建本地掛載的目錄結構
 ├── master
 │   ├── conf
 │   ├── data
 │   └── logs
 └── slaver
     ├── conf
     ├── data
     └── logs
# master節點
mkdir -p ~/mydata/mysql/master/data
mkdir -p ~/mydata/mysql/master/conf
mkdir -p ~/mydata/mysql/master/logs
# slaver節點
mkdir -p ~/mydata/mysql/master/data
mkdir -p ~/mydata/mysql/master/conf
mkdir -p ~/mydata/mysql/master/logs
  1. 創建臨時節點,獲取配置文件

    docker run --rm --name mysqltemp -it -v ~/mydata/mysql/master/conf/:/var/lib/mysql  -e MYSQL_ROOT_PASSWORD=root mysql/mysql-server:8.0.26
    
    docker cp mysqltemp:/etc/my.cnf ~/mydata/
    
  2. 配置文件

    [mysqld]
    server-id=47
    #開啓binlog
    log_bin=master-bin
    log_bin-index=master-bin.index
    skip-name-resolve
    # 設置連接端口
    port=3306
    # 設置mysql的安裝目錄
    basedir=/usr/local/mysql
    # 設置mysql數據庫的數據的存放目錄
    datadir=/usr/local/mysql/mysql-files
    # 允許最大連接數
    max_connections=200
    # 允許連接失敗的次數。
    max_connect_errors=10
    # 服務端使用的字符集默認爲UTF8
    character-set-server=utf8
    # 創建新表時將使用的默認存儲引擎
    default-storage-engine=INNODB
    # 默認使用“mysql_native_password”插件認證
    #mysql_native_password
    default_authentication_plugin=mysql_native_password
    
  3. 啓動主

    docker run --name mysql-m -p 3336:3306 -v ~/mydata/mysql/master/conf/my.cnf:/etc/mysql/my.cnf -e MYSQL_ROOT_PASSWORD=root -d mysql/mysql-server:8.0.26
    

    容器內容部執行MySQL命令:show master status;

    mysql> show master status;
    +-------------------+----------+--------------+------------------+-------------------+
    | File              | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
    +-------------------+----------+--------------+------------------+-------------------+
    | master-bin.000003 |      156 |              |                  |                   |
    +-------------------+----------+--------------+------------------+-------------------+
    1 row in set (0.00 sec)
    
  4. 配置從

    server-id=48
    #打開MySQL中繼日誌
    relay-log-index=slave-relay-bin.index
    relay-log=slave-relay-bin
    #打開從服務二進制日誌
    log-bin=mysql-bin
    #使得更新的數據寫進二進制日誌中
    log-slave-updates=1
    
    #默認使用“mysql_native_password”插件認證
    #mysql_native_password
    default_authentication_plugin=mysql_native_password
    
  5. 啓動從

    docker run --name mysql-s -p 3337:3306 -v ~/mydata/mysql/slaver/conf/my.cnf:/etc/mysql/my.cnf -e MYSQL_ROOT_PASSWORD=root -d mysql/mysql-server:8.0.26
    
  6. 從連接主(容器內容的執行Mysql)

    登錄從服務
    mysql -u root -p;
    
    #設置同步主節點:
    CHANGE MASTER TO
    MASTER_HOST='172.17.0.3',
    MASTER_PORT=3306,
    MASTER_USER='root',
    MASTER_PASSWORD='root',
    MASTER_LOG_FILE='master-bin.000003',
    MASTER_LOG_POS=156,
    GET_MASTER_PUBLIC_KEY=1;
    
    #開啓slave
    start slave;
    #查看主從同步狀態
    show slave status;
    或者用 show slave status \G; 這樣查看比較簡潔
    

    注意

    1. MASTER_HOST 是 mysql-master 在docker的IP地址;使用docker inspect -- format 查看
    2. MASTER_PORT也是容器內部的端口;通常都是 3306

    如下可以確認成功運行:

    image-20211021002007968

  7. 主從搭建測試

    測試-主從同步

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章