使用docker創建MySQL主從複製

1. 準備工作,把虛擬機的內存調到2G以上:
2.在這裏插入圖片描述
在這裏插入圖片描述
3. 查看是否已經安裝了docker:rpm -qa | grep docker
4. 卸載原來的docker:yum remove 組件
5. 安裝docker:yum install -y docker
6. 啓動docker:systemctl start docker
報錯:
在這裏插入圖片描述
解決:vim /etc/sysconfig/docker
在這裏插入圖片描述
報錯:
/usr/bin/docker-current: Error response from daemon: oci runtime error: container_linux.go:247: starting container process caused “process_linux.go:258: applying cgroup configuration for process caused “Cannot set property TasksAccounting, or unknown property.””.
解決:
yum update
啓動成功。
6. 修改倉庫爲阿里雲倉庫,然後重啓systemctl restart docker:vim /etc/docker/daemon.json
{
“registry-mirrors”: [“https://uulfe4bd.mirror.aliyuncs.com”]
}
7. 下載centos7鏡像:docker pull registry.cn-hangzhou.aliyuncs.com/moensun/centos7
8. 查看所有的鏡像:docker images
9. 創建一個centos7容器:docker run -d -p 5000:3306 --name master 3db94df3e006 /usr/sbin/init
解釋:-p是指定宿主機跟docker容器之間的端口映射,以便外網訪問docker容器,如5000:3306,那麼通過訪問宿主機ip:5000,相當於訪問docker容器的3306端口
,可以使用多個-p來指定多個端口。

11. 查看所有的docker容器:docker ps -a
12. 修改容器名稱:docker rename kind_newton master(如果在創建時已經通過–name指定了名稱,則此處不需要修改)
13. 進入centos7容器:docker exec -it master /bin/bash
14. 安裝vim和上傳命令:yum install -y vim
yum install –y lrzsz

15. 上傳MySQL壓縮包並安裝,安裝過程參考https://blog.csdn.net/shidebin/article/details/83548436,我這篇文章。要注意的是前面創建容器時映射的端口爲3306,而且只映射了一個端口,所以在my.cnf文件中mysql的端口也應寫成3306,不然用navicate是連不上的。(要非常注意,我這裏弄了很久)
安裝報錯:
[root@4099d4f64191 mysql]# bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
bin/mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory
解決:
yum install -y perl perl-Module-Build net-tools autoconf libaio numactl-libs
啓動成功,記住這個密碼,登錄時用。
在這裏插入圖片描述
15 使用navicate連接剛纔的mysql,ip爲宿主機的ip而不是容器的ip,端口是宿主機映射端口不是my.cnf配置的3306端口:
在這裏插入圖片描述
16 把剛纔建的容器保存爲鏡像,用來創建其他mysql容器:
docker stop master
docker export master > mysqlMaster.tar
cat mysqlMaster | docker import - mysqlimage:master
17 使用剛纔保存的mysql鏡像再創建一個mysql容器:
docker run -d -p 5001:5001 31da432e6548 /usr/sbin/init
docker ps –a
docker rename upbeat_shirley master2
docker exec -it master2 /bin/bash
18 修改mysql配置並啓動:
修改my.cnf:port=5001,此處應改爲映射的端口。
刪除/usr/local/mysql/data下的所有文件,並執行命令:
rm –rf /usr/local/mysql/data/*
bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
systemctl start mysql
mysql -uroot -p
SET PASSWORD = PASSWORD(‘root’);
flush privileges;
grant all on . to ‘root’@’%’ identified by ‘root’;
flush privileges;

19 主機操作:
vim /etc/my.cnf
server-id= 2
log-bin = mysql-bin
log-bin-index = mysql-bin.index
relay-log = mysql-relay
relay-log-index = mysql-relay.index
expire-logs-days = 10
max-binlog-size = 100M
max_binlog_cache_size = 8M
log-slave-updates = 1
binlog_cache_size = 4M
binlog_format = MIXED
#binlog_format = ROW
#replicate-do-db = db%.%
replicate-ignore-db= mysql.%
replicate-ignore-db=information_schema.%
replicate-ignore-db=performance_schema.%
replicate-ignore-db=sys.%
replicate-wild-ignore-table = mysql.%
sync_binlog = 1
relay_log_recovery = 1
log_slave_updates = 1
sql_mode=STRICT_TRANS_TABLES
[mysqldump]
quick
max_allowed_packet = 32M
登錄mysql創建用來複制的用戶:
mysql> create user ‘repl’@‘172.17.0.%’ identified by ‘shidebin12’;
Query OK, 0 rows affected (0.00 sec)

mysql> grant replication slave on . to ‘repl’@‘172.17.0.%’ identified by ‘shidebin12’;
Query OK, 0 rows affected, 1 warning (0.01 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
重啓mysql:systemctl restart mysql
登錄mysql查看主機狀態:
在這裏插入圖片描述
20 從機操作:
vim /etc/my.cnf
server-id= 3
log-bin = mysql-bin
log-bin-index = mysql-bin.index
relay-log = mysql-relay
relay-log-index = mysql-relay.index
expire-logs-days = 10
max-binlog-size = 100M
max_binlog_cache_size = 8M
log-slave-updates = 1
binlog_cache_size = 4M
binlog_format = MIXED
#binlog_format = ROW
#replicate-do-db = db%.%
replicate-ignore-db= mysql.%
replicate-ignore-db=information_schema.%
replicate-ignore-db=performance_schema.%
replicate-ignore-db=sys.%
sync_binlog = 1
relay_log_recovery = 1
log_slave_updates = 1
sql_mode=STRICT_TRANS_TABLES
[mysqldump]
quick
max_allowed_packet = 32M

注意修改server-id和port,每臺機器的server-id需要不同
登錄mysql關聯主機:
mysql> stop slave;
Query OK, 0 rows affected (0.01 sec)

mysql> change master to
-> master_host=‘172.17.0.2’,
-> master_user=‘slaveRepl’,
-> master_password=‘shidebin12’,
-> master_log_file=‘mysql-bin.000002’,
-> master_log_pos=606;
Query OK, 0 rows affected, 2 warnings (0.01 sec)

mysql> start slave;
Query OK, 0 rows affected (0.00 sec)
(註釋:master_host:主機地址
master_user:主機上用來主從複製的用戶,也就是剛纔在主機創建的用戶
master_password:用戶密碼
master_log_file:主機binlog文件,就是show master status中的記錄
master_log_pos:複製起始位置,就是show master status中的記錄)
在這裏插入圖片描述
說明成功:
21.驗證:
在主機上新建一個庫:
在這裏插入圖片描述
在從機上查看:
在這裏插入圖片描述
成功

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