基於docker實現mysql主從,數據持久化存儲


一:環境配置

mysql-master
[root@localhost ~]# mkdir /mysql-master-data
[root@localhost ~]# mkdir /mysql-master
[root@localhost mysql-master]# vim my.cnf

[mysqld]
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
datadir         = /var/lib/mysql
#log-error      = /var/log/mysql/error.log
# By default we only accept connections from localhost
#bind-address   = 127.0.0.1
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
server-id=1
log-bin=mysql-bin #開啟二進制文件
#binlog-do-db=demo    #需要同步的二進制數據庫名;
binlog-ignore-db=information_schema    #不同步的二進制數據庫名,如果不設置可以將其注釋掉;
binlog-ignore-db=mysql
binlog-ignore-db=performance_schema
binlog-ignore-db=sys
                     
mysql-slave
[root@localhost ~]# mkdir /mysql-slave
[root@localhost ~]# mkdir /mysql-slave-data
[root@localhost ~]# touch /mysql-slave-data/relay.log
[root@localhost mysql-slave]# vim my.cnf

[mysqld]
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
datadir         = /var/lib/mysql
#log-error      = /var/log/mysql/error.log
# By default we only accept connections from localhost
#bind-address   = 127.0.0.1
# Disabling symbolic-links is recommended to prevent assorted security risks
server-id=2
relay-log=/var/lib/mysql/relay.log

二:編寫Dockerfile

master
from mysql5.7
add mysql-master /etc/mysql # 文件必須和Dockerfile在同一個文件下
生成鏡像
docker build -t mysql-master .  # .表示Dockerfile所在的當前文件
slave
from mysql5.7
add mysql-slave /etc/mysql
生成鏡像
docker build -t mysql-slave .

三:啟動容器

mysql-master
docker run -p4444:3306 --name mysql-master -e MYSQL_ROOT_PASSWORD=123456 -v /mysql-master-data:/var/lib/mysql -v /mysql-master:/etc/mysql -d mysql:5.7

docker inspect --format='{{.NetworkSettings.IPAddress}}' mysql-master
mysql-slave
docker run -p3333:3306 --name mysql-slave -e MYSQL_ROOT_PASSWORD=123456 -v /mysql-slave-data:/var/lib/mysql -v mysql-slave:/etc/mysql -d mysql:5.7

docker inspect --format='{{.NetworkSettings.IPAddress}}' mysql-slave

四:配置主從

master

1>鎖表,先加鎖,防止兩邊數據不一致;如果業務還未上線,這個就沒有必要了
mysql> flush tables with read lock;

2>創建授權用戶
mysql> grant replication slave on *.* to 'slave'@'172.17.0.3' identified by '123456';

3>查看binglog信息,只有打開二進制日志,這句命令才有結果,表示當前數據庫的二進制日志寫到什么位置
mysql> show master status\G;
*************************** 1. row ***************************
             File: mysql-bin.000002
         Position: 154
     Binlog_Do_DB: 
 Binlog_Ignore_DB: information_schema,mysql,performance_schema,sys
Executed_Gtid_Set: 
1 row in set (0.00 sec)


# 注意:此時千萬不要往里面寫東西
slave
mysql> change master to master_host='172.17.0.2', master_user='slave', master_password='123456', master_port=3306, master_log_file='mysql-bin.000002', master_log_pos=154;
參數說明:
    master_host:        master ip
    master_user:        同步用戶
    master_password:    密碼
    master_port:     端口
    master_log_file:    master上面查看到的二進制日志名
    master_log_pos:     master上面查看到的POS值

mysql>slave start;

mysql> show slave status \G;
    Slave_IO_Running: Yes
    Slave_SQL_Running: Yes


免責聲明!

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



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