Home > Database > Mysql Tutorial > How to use Docker to deploy MySQL5.7&8.0 master-slave cluster

How to use Docker to deploy MySQL5.7&8.0 master-slave cluster

王林
Release: 2023-06-01 22:43:04
forward
1170 people have browsed it

> Deploy mysql 5.7 cluster master & slave (for testing only)

Mirror version 5.7

1. Create an overlay network

docker network create --driver overlay common-network --attachable
Copy after login
Copy after login

2. Edit two configuration files master.cnf and slave.cnf

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

[mysqld]
log-bin=mysql-bin
server-id=1
gtid-mode=on
enforce-gtid-consistency=on
Copy after login
!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mysql.conf.d/

[mysqld]
server-id=2
gtid-mode=on
enforce-gtid-consistency=on
Copy after login

3. Start 2 mysql: mysql-master, mysql-slave

docker run -d \
--name mysql-master \
--network common-network \
-e mysql_root_password=passw0rd \
-v `pwd`/master.cnf:/etc/mysql/my.cnf \
-p 3306:3306 \
-d mysql:5.7
Copy after login
docker run -d \
--name mysql-slave \
--network common-network \
-e mysql_root_password=passw0rd \
-v `pwd`/slave.cnf:/etc/mysql/my.cnf \
-p 3307:3306 \
-d mysql:5.7
Copy after login

4. Add the user used for replication from the library

docker run -it --rm --network common-network mysql mysql -hmysql-master -uroot -ppassw0rd \
-e "create user 'repl'@'%' identified by 'password' require ssl; " \
-e "grant replication slave on *.* to 'repl'@'%';"
Copy after login

5. Connect master & slave

docker run -it --rm --network common-network mysql mysql -hmysql-slave -uroot -ppassw0rd \
-e "change master to master_host='mysql-master', master_port=3306, master_user='repl', master_password='password', master_auto_position=1, master_ssl=1;" \
-e "start slave;"
Copy after login
Copy after login

6. Verify slave status

docker run -it --rm --network common-network mysql mysql -hmysql-slave -uroot -ppassw0rd -e "show slave status\g"
Copy after login
Copy after login

The following status is normal:

slave_io_running: yes

slave_sql_running: yes

> Deploy mysql 8.0 cluster master & slave (for testing only )

Mirror version mysql:8.0

1. Create an overlay network

docker network create --driver overlay common-network --attachable
Copy after login
Copy after login

2. Start 2 mysql: mysql-master, mysql-slave

docker run -d \
--name mysql-master \
--network common-network \
-e mysql_root_password=passw0rd \
-p 3306:3306 \
-d mysql --default-authentication-plugin=mysql_native_password
Copy after login
docker run -d \
--name mysql-slave \
--network common-network \
-e mysql_root_password=passw0rd \
-p 3307:3306 \
-d mysql --default-authentication-plugin=mysql_native_password
Copy after login

3. Configure master & slave

docker run -it --rm --network common-network mysql mysql -hmysql-master -uroot -ppassw0rd \
-e "set persist server_id=1;" \
-e "set persist_only gtid_mode=on;" \
-e "set persist_only enforce_gtid_consistency=true; " \
-e "create user 'repl'@'%' identified by 'password' require ssl; " \
-e "grant replication slave on *.* to 'repl'@'%';"
Copy after login
docker run -it --rm --network common-network mysql mysql -hmysql-slave -uroot -ppassw0rd \
-e "set persist server_id=2;" \
-e "set persist_only gtid_mode=on;" \
-e "set persist_only enforce_gtid_consistency=true; "
Copy after login

4. Restart master & slave

docker restart mysql-master mysql-slave
Copy after login

5. Connect master & slave

docker run -it --rm --network common-network mysql mysql -hmysql-slave -uroot -ppassw0rd \
-e "change master to master_host='mysql-master', master_port=3306, master_user='repl', master_password='password', master_auto_position=1, master_ssl=1;" \
-e "start slave;"
Copy after login
Copy after login

6. Verify slave status

docker run -it --rm --network common-network mysql mysql -hmysql-slave -uroot -ppassw0rd -e "show slave status\g"
Copy after login
Copy after login

The following status is normal:

slave_io_running: yes

slave_sql_running: yes

> Verify data synchronization

Create database anoyi on master

docker run -it --rm --network common-network mysql mysql -hmysql-master -uroot -ppassw0rd \
 -e "create database anoyi default character set utf8mb4 collate utf8mb4_general_ci;"
Copy after login

View database list on slave

docker run -it --rm --network common-network mysql mysql -hmysql-slave -uroot -ppassw0rd \
 -e "show databases;"
mysql: [warning] using a password on the command line interface can be insecure.
+--------------------+
| database      |
+--------------------+
| anoyi       |
| information_schema |
| mysql       |
| performance_schema |
| sys        |
+--------------------+
Copy after login

The above is the detailed content of How to use Docker to deploy MySQL5.7&8.0 master-slave cluster. For more information, please follow other related articles on the PHP Chinese website!

Related labels:
source:yisu.com
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template