Docker操做Mysql主備模式

這是我參與8月更文挑戰的第4天,活動詳情查看:8月更文挑戰mysql

請確保目前Mysq已經啓動sql

docker ps  #查看容器id
複製代碼
sudo docker exec -it {容器id} /bin/bash  #進入容器內部
複製代碼

配置主數據庫

根據安裝mysql時設定的路徑進入my.cnfdocker

進入
vim my.cnf #若是沒vim就裝一個
#安裝vim命令
apt-get update
apt-get install vim
​
[mysqld]
##同局域網惟一ID
server-id=100
## 開啓二進制日誌功能,能夠隨便取(關鍵)
log-bin=mysql-bin
##server-id=201
##log-bin=mysql-bin 
# 同一局域網下均惟一
複製代碼

進入MySQL數據庫

mysql -uroot -p
複製代碼
#建立同步用戶以及權限
CREATE USER ‘slave’@’%’ IDENTIFIED BY ‘123456’;
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON . TO ‘slave’@’%’;
複製代碼

使用Navicat連接一下創建的slave,查看是否成功vim

配置從數據庫

[mysqld]
## 設置server_id,注意要惟一
server-id=202
## 開啓二進制日誌功能,以備Slave做爲其它Slave的Master時使用
log-bin=mysql-slave-bin  
複製代碼

連接主數據庫

進入到主數據庫查看狀態bash

mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000004 |     7624 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
複製代碼

從數據庫根據主數據庫狀態執行服務器

mysql> change master to master_host='{ip_address}', 
    -> master_user='slave', master_password='123456',
    -> master_port=3306, 
    -> master_log_file='mysql-bin.000004', 
    -> master_log_pos= 7624, master_connect_retry=30;
複製代碼

從庫執行markdown

mysql> start slave ; #開啓同步
    
#查看同步狀態    
mysql> show slave status \G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 172.16.77.18
                  Master_User: slave
                  Master_Port: 3306
                Connect_Retry: 30
              Master_Log_File: mysql-bin.000004
          Read_Master_Log_Pos: 7624
               Relay_Log_File: bda0b9647912-relay-bin.000002
                Relay_Log_Pos: 324
        Relay_Master_Log_File: mysql-bin.000004
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: 
              #略
複製代碼

出現網絡

Slave_IO_Running: Yespost

Slave_SQL_Running: Yes

表示搭建成功

排坑

Slave_IO_Running: NO

  1. 找到mysql配置的這個文件/etc/my.cnf
  2. 在文件中找到mysql錯誤異常日誌文件的路徑,我配置的是log-error=/var/log/mysqld.log
  3. 編輯/var/log/mysqld.log文件
  4. 查看具體異常信息

異常信息

[ERROR] Slave I/O for channel ‘’: Fatal error: The slave I
/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must
be different for replication to work. Error_code: 1593
複製代碼

問題緣由 因爲uuid相同,而致使觸發此異常

解決方案

因爲存Mysql的 虛擬機爲一臺複製過來的,因此 uudi 相同,把uuid修改便可

Slave_IO_Running:Connecting ; Slave_SQL_Running:Yes

1.網絡不通
2.帳戶密碼錯誤
3.防火牆
4.mysql配置文件問題
5.鏈接服務器時語法
6.主服務器mysql權限

這個比較清楚明瞭,就不具體說明了,跟上面的實操下來,就知道這6條都要怎麼改。

Slave_SQL_Running:No

緣由:

1.程序可能在slave上進行了寫操做

2.也多是slave機器重起後,事務回滾形成的。

解決方案

首先停掉Slave服務:slave stop

進入master

mysql> show master status; +------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000003 | 8935 | test1 | jzsoft | +------------------+----------+--------------+------------------+ 手動同步

mysql> change master to master_host=' 你的ip',master_user='slave',master_pas sword=' 你的密碼 ',master_log_file='mysql-bin.000003',master_log_pos=8935;

mysql> show slave status\G;

看到

Slave_IO_Running: Yes Slave_SQL_Running: Yes 便可

相關文章
相關標籤/搜索