在远程linux主机用docker部署mysql一主一从跟双主从复制

在远程linux主机用docker部署mysql一主一从跟双主从复制

本处使用的是SSH连接工具Xshell连接远程linux主机(需先在windows上安装Xshell软件),在同一台linux主机或者两台linux主机都可以部署主从
(在操作过程中可能遇到的问题时的处理命令:当run的时候可能会提示端口已经占用,你可以换一个端口3305:3306这样;或者你配置错了需要重新来,可以先把运行中的容器关闭再删除,先用命令docker ps -a查看所有的容器,包括不在运行状态的,docker ps仅仅列出正在运行状态的容器,然后停止的命令是docker stop 容器ID,删除容器是docker rm 容器ID;之前配置过slave,需要先stop slave;停止下再输入change那一串,再start slave;)

在连接远程主机后键入依次以下命令:
1、docker search mysql 查找mysql镜像
2、docker pull mysql:5.7.19 把mysql镜像拉取到本地
3、在linux主机上创建conf文件夹目录,并且在这个目录里面创建master.conf跟slave.cnf文件,或者
master.conf跟slave.cnf文件可以预先在windows电脑上创建,分别在里头键入以下内容(待会在下面提供),然后直接在xshell软件上,点击传文件,会跳转到Xftp软件(如果预先没有在windows上安装这个软件要先安装),然后直接从windows主机上直接拖动master.conf跟slave.cnf文件到指定远程linux主机的/root/conf文件夹(刚才我们在linux主机上预先创建的文件夹)下,master.conf跟slave.cnf文件是我们在创建mysql容器
的时候要用到的,通过映射,作为mysql的配置文件:
master文件内容:

[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 

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文件内容:

[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=relay-bin

relay-log-index=slave-relay-bin.index



performance_schema = 0 

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一定要不一样,其余部分都一样。
4、启动master容器:
docker run -p 3309:3306 --name master -v /root/conf/master.cnf:/etc/mysql/conf.d/master.cnf -e MYSQL_ROOT_PASSWORD=220316 -d mysql:5.7.19
(参数解释如下:
-p 3309:3306:将容器的3306端口映射到主机的3309端口。
-v /root/conf/master.cnf:/etc/mysql/conf.d/master.cnf:将主机当前目录下的/root/conf/master.cnf挂载到容器的/etc/mysql/conf.d/master.cnf。记住只能是在conf.d的文件下面才可以。
-e MYSQL_ROOT_PASSWORD=220316:初始化root用户的密码。)
5、启动slave容器:
docker run -p 3307:3306 --name slave -v /root/conf/slave.cnf:/etc/mysql/conf.d/slave.cnf -e MYSQL_ROOT_PASSWORD=220316 -d mysql:5.7.19
6、docker ps 查看正在运行的容器
7、进入到master容器中:docker exec -i -t 8a16c84f8bde /bin/bash
8、登陆master容器的mysql,命令:mysql -hlocalhost -uroot -p,然后回车,输入密码,如刚才我们在创建mysql容器的时候设置的密码220316,
密码在输入过程是不可见的,确保输入正确然后回车即可
9、查看master数据库状态,命令如下:show master status; (要记录下file跟position的地址,待会儿配置从库的时候要用到)
10、在master数据库中创建用户,命令如下:create user zhangsan;
11、在master数据库中给刚才创建的用户赋予一定权限,命令如下:
GRANT ALL PRIVILEGES ON . TO zhangsan@’%’ IDENTIFIED BY ‘220316’;
12、进入到slave容器中:docker exec -i -t 4a768410fbdd /bin/bash
13、登陆slave容器mysql,命令:mysql -hlocalhost -uroot -p,然后回车,输入密码,如刚才我们在创建mysql容器的时候设置的密码220316,密码
在输入过程是不可见的,确保输入正确然后回车即可
14、在slave数据库中配置主从关系关联:
change master to
master_host=‘data.synron.cn’,
master_port=3309,
master_user=‘zhangsan’,
master_password=‘220316’,
master_log_file=‘mysql-bin.000003’,
master_log_pos=640;

在这里插入图片描述
15、在salve的mysql数据库中启动服务,命令如下:start slave;
16、在salve的mysql数据库中查看启动状态,命令如下:show slave status\G
如果Slave_IO_Running: Yes 跟Slave_SQL_Running: Yes都为Yes的话即为设置主从成功,这时候可以返回master的mysql容器,创建一个数据库,然后再
回到slave的mysql容器查看show databases; ,如果你看到在slave的mysql数据库下也有刚才在master下创建的数据库,即验证mysql一主一从复制成功
17、接下来配置双主复制,即互为主从;登陆前面创建的slave的mysql里面,创建用户create user lisi;
18、给刚才创建的用户赋予一定权限,命令如下:GRANT ALL PRIVILEGES ON . TO lisi@’%’ IDENTIFIED BY ‘220316’;
19、然后输入命令:show master status; (要记录下file跟position的地址,待会儿配置从库的时候要用到)
20、接着,回到master的mysql下,并登陆,键入以下内容:
change master to
master_host=‘data.synron.cn’,
master_port=3307,
master_user=‘lisi’,
master_password=‘220316’,
master_log_file=‘mysql-bin.000003’,
master_log_pos=632;
21、接着输入命令:start slave;
22、输入命令:show slave status\G查看启动状态
如果Slave_IO_Running: Yes 跟Slave_SQL_Running: Yes都为Yes的话即为设置主从成功,即我们反向配置主从也成功,这时候可以去验证下,也可以在外面windows
本地上先连接什么的master跟slave数据库,然后再创建数据库进行验证
在这里插入图片描述
参考博文 使用Docker容器搭建MySql主从复制,在 此博文的基础上,我进行了更详细的描述

猜你喜欢

转载自blog.csdn.net/aisahngLIFE/article/details/83304582