docker安装MySQL并实现主从复制

docker安装MySQL

1、首先在docker搜索mysql

docker search mysql

docker安装MySQL并实现主从复制_第1张图片

2、docker仓库拉取mysql8.0

docker pull mysql:8.0	//拉取8.0版本的MySQL

docker pull mysql		//默认拉取最新版本的MySQL

docker安装MySQL并实现主从复制_第2张图片

备注:由于我之前拉取过mysql,所以这里显示的是Already exists

3、查看本地的镜像是否下载成功

docker images mysql:8.0

在这里插入图片描述

4、运行mysql:8.0容器

docker run -p 3307:3306 --name master -e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0

-p:将本地主机的端口映射到docker容器的端口

–name:给运行的容器命名

-e:配置信息,这里是配置root密码

-d:镜像的名称

在这里插入图片描述

5、查看master容器的运行情况

docker ps

在这里插入图片描述

6、登录mysql

docker exec -it master bash
mysql -u root -p

-it后接的是容器的名称,也就是运行容器时–name后指定的名称
docker安装MySQL并实现主从复制_第3张图片

MySQL实现主从复制

接上述的mysql安装,接下来就是实现主从复制

1、创建配置文件

要想通过docker安装的mysql实现主从复制,我们需要指定运行时的配置文件

所以首先我们需要在宿主机上面建立master.cnf以及slave.cnf

其中master.cnf文件的内容为:

[mysqld]
#pid-file = /var/run/mysqld/mysqld.pid
#socket = /var/run/mysqld/mysqld.sock
 
datadir = /var/lib/mysql
 
symbolic-links=0
 
character-set-server = utf8
#skip-networking
 
innodb_print_all_deadlocks = 1
 
max_connections = 2000
 
max_connect_errors = 6000
 
open_files_limit = 65535
 
table_open_cache = 128
 
max_allowed_packet = 4M
 
binlog_cache_size = 1M
 
max_heap_table_size = 8M
 
tmp_table_size = 16M
 
read_buffer_size = 2M
 
read_rnd_buffer_size = 8M
 
sort_buffer_size = 8M
 
join_buffer_size = 28M
 
key_buffer_size = 4M
 
thread_cache_size = 8
#query_cache_type = 1
#query_cache_size = 8M
#query_cache_limit = 2M
 
ft_min_word_len = 4
 
 
 
log-bin = mysql-bin
 
server-id = 1
 
binlog_format = mixed
 
relay-log-index=slave-relay-bin.index
 
performance_schema = 0
 
default-authentication-plugin=mysql_native_password
 
explicit_defaults_for_timestamp
#lower_case_table_names = 1
 
interactive_timeout = 28800
 
wait_timeout = 28800
# Recommended in standard MySQL setup
#sql_mode=NO_ENGINE_SUBSTITUTION,NO_AUTO_CREATE_USER,STRICT_TRANS_TABLES
 
[mysqldump]
 
quick
 
max_allowed_packet = 16M
 
[myisamchk]
 
key_buffer_size = 8M
 
sort_buffer_size = 8M
 
read_buffer = 4M
 
write_buffer = 4M

lower_case_table_names:忽略表名、列名等数据结构的大小写(注意:不是每行记录内容的大小写!)。
server-id=1: 表示此MySQL服务器是主服务器 。
log-bin:开启二进制记录。这是为了主从复制而做的设置。本文使用RBR(Row-Based Replication)模式。
slow_query_log=1:开启慢查询日志。如果某一条SQL执行的时间超过long_query_time设置的秒数,那么就记录下来。记录文件路径可以使用show variables;命令,在变量名是slow_query_log_file下查找到具体的日志文件路径。
long_query_time=1:单位是秒。指如果某一条SQL语句执行时间超过1秒,就记录下来。必须开启慢查询日志了以后,此变量才能使用。
log_error:开启错误日志。show variables like ‘log_error’; 就可以查询到日志文件的路径。mysql的docker官方镜像如果设置别的取值会导致容器无法正常启动。

slave.cnf文件的内容为:

[mysqld]
#pid-file = /var/run/mysqld/mysqld.pid
#socket = /var/run/mysqld/mysqld.sock
 
datadir = /var/lib/mysql
 
symbolic-links=0
 
character-set-server = utf8
#skip-networking
 
innodb_print_all_deadlocks = 1
 
max_connections = 2000
 
max_connect_errors = 6000
 
open_files_limit = 65535
 
table_open_cache = 128
 
max_allowed_packet = 4M
 
binlog_cache_size = 1M
 
max_heap_table_size = 8M
 
tmp_table_size = 16M
 
read_buffer_size = 2M
 
read_rnd_buffer_size = 8M
 
sort_buffer_size = 8M
 
join_buffer_size = 28M
 
key_buffer_size = 4M
 
thread_cache_size = 8
#query_cache_type = 1
#query_cache_size = 8M
#query_cache_limit = 2M
 
ft_min_word_len = 4
 
 
 
log-bin = mysql-bin
 
server-id = 2
 
binlog_format = mixed
 
relay-log-index=slave-relay-bin.index
 
performance_schema = 0
 
default-authentication-plugin=mysql_native_password
 
explicit_defaults_for_timestamp
#lower_case_table_names = 1
 
interactive_timeout = 28800
 
wait_timeout = 28800
# Recommended in standard MySQL setup
#sql_mode=NO_ENGINE_SUBSTITUTION,NO_AUTO_CREATE_USER,STRICT_TRANS_TABLES
 
[mysqldump]
 
quick
 
max_allowed_packet = 16M
 
[myisamchk]
 
key_buffer_size = 8M
 
sort_buffer_size = 8M
 
read_buffer = 4M
 
write_buffer = 4M

两个文件的区别就是server-id不同,其余部分都一样

2、运行容器

运行master节点

docker run -p 3308:3306 --name master -v /home/zpf/wyg/mysql/master.cnf:/etc/mysql/conf.d/master.cnf -e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0

运行slave节点

docker run -p 3309:3306 --name slave -v /home/zpf/wyg/mysql/slave.cnf:/etc/mysql/conf.d/slave.cnf -e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0

-v是将宿主机的文件挂载到docker对应的目录中,这里我们使用的是自定义的配置文件,所以要将其挂载到docker对应的位置上

查看运行结果

docker ps

在这里插入图片描述

3、配置master容器

docker exec -it master bash

mysql -u root -p

进入到master mysql以后需要分配从节点的用户

create user 'slave'@'%' identified by '123456';
grant replication slave on *.* to 'slave'@'%';
flush privileges;

查看master数据库状态:

show master status;

在这里插入图片描述

4、配置slave容器

首先我们需要先查一下master数据库运行的ip地址,需要根据容器的id进行查询

docker ps
找到对应的id,根据对应的id查询ip地址
docker inspect --format='{
     {.NetworkSettings.IPAddress}}' 919cda654cb8

在这里插入图片描述

进入slave容器中

docker exec -it slave bash

mysql -u root -p

然后进行如下配置

mysql> change master to 
    -> master_host='172.17.0.2',
    -> master_port=3306,
    -> master_user='slave',
    -> master_password='123456',
    -> get_master_public_key=1,
    -> master_log_file='mysql-bin.000003',
    -> master_log_pos=1423;

master_host为刚才查询到的ip地址

master_user以及master_password为刚才在master数据库分配的slave用户

get_master_public_key=1为:mysql8配置主从复制必须的

master_log_file和master_log_pos是在show master status中查询到的那两个信息

5、启动并查看slave

使用如下命令启动slave节点

start slave;

查看slave的状态:

show slave status\G;

docker安装MySQL并实现主从复制_第4张图片

Slave_IO_Running以及Slave_SQL_Running都为Yes代表成功

6、可以使用navicat连接数据库进行测试

在master数据库创建数据库表并写入数据,slave数据库会自动同步

7、如果服务器关机重启后,直接重启这两个数据库即可

docker restart master
docker restart slave

在这里插入图片描述

参考:
Docker安装MySQL8.0的实现方法
在linux主机用docker部署mysql8 一主一从

你可能感兴趣的:(MySQL,docker,mysql,docker,linux)