用docker配置mysql主从集群同步

75 篇文章 1 订阅
24 篇文章 0 订阅

1.安装docker

详见https://blog.csdn.net/qq_33320785/article/details/81189061

 

安装步骤

sudo yum install -y yum-utils device-mapper-persistent-data lvm2

sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

sudo yum makecache fast

sudo yum install docker-ce

注意:安装带版本号的稳定版的docker-ce,不要安装不稳定的最新版本。

启动docker服务:

service docker start

sudo systemctl enable docker.service

 

注意:CentOS 7以上版本

 

2.docker部署主从mysql

(1)Docker上搜索mysql : docker search mysql

(2)pull mysql到本地,命令如下:docker pull mysql:5.6.44

注意:这边的mysql版本是5.6.44的。最新版本是8.0的。该方法对8.0的无效

 

(3).在主机下面新增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

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

 

 

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

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官方镜像如果设置别的取值会导致容器无法正常启动。

 

(4)运行容器

启动master容器:

docker run -d -p 3306:3306 --name master -v /home/vagrant/master.cnf:/etc/mysql/conf.d/master.cnf -e MYSQL_ROOT_PASSWORD=123456  mysql:5.6.44

启动slave容器:

docker run -d -p 3307:3306 --name slave -v /home/vagrant/slave.cnf:/etc/mysql/conf.d/slave.cnf -e MYSQL_ROOT_PASSWORD=123456 mysql:5.6.44

 

(参数解释如下:

-p 3306:3306:将容器的3306端口映射到主机的3306端口。

-v 将主机当前目录下的master.cnf挂载到容器的/etc/mysql/conf.d/master.cnf。记住只能是在conf.d的文件下面才可以。

-e MYSQL_ROOT_PASSWORD=123456:初始化root用户的密码。

docker ps 查看运行中的容器

docker ps -a 查看所有容器

(5)进入容器中,命令如下:

进入到slave容器中:docker exec -it  slave bash

进入到master容器中:docker exec -it  master bash

(6)查看master数据库状态,命令如下:show master status;

(如果出现这个表格就说明启动成功了,这边我们需要记录file字段的值,因为在slave中需要用这个值进行主从关联)

 

    在master数据库中创建用户,命令如下:create user sunfei


    在master数据库中给刚才创建的用户赋予一定权限,命令如下:

GRANT ALL PRIVILEGES ON *.* TO 'sunfei'@'%' IDENTIFIED BY '123456'; FLUSH PRIVILEGES;FLUSH PRIVILEGES;

(参数介绍:

1.FLUSH PRIVILEGES;这个命令必须填写,否则上面设置的用户权限失效。

2.ip地址是可以设置范围的。例如:GRANT REPLICATION SLAVE ON *.* TO'sunfei'@'ip%' IDENTIFIED 123456;

3.操作的数据库也是可以指定的。

4.用户的权限也是可以设置的。具体的命令大家可以自己去学习,我这里就不多说了。

如果不设置用户权限的话,本地可以连接的上mysql服务器,局域网或者外网是连接不上,会显示连接被拒绝或者用户没有这个权限。除此之外权限还可以精确到某个数据库,连接者的IP地址区间,设置是某个数据的操作问题等等都可以进行设置。我这边设置的是sunfei这个用户具备所有用户数据库的权限,所有的ip地址都可以通过master这个用户来连接主数据库。)

 

(7)进入slave数据库中配置主从关系关联:

change master to master_host='172.17.0.2',master_port=3306,master_user='sunfei',master_password='123456',master_log_file='master-bin.000004',master_log_pos=0;

要和master服务器所配置的相互对应如下如所示的Position对应(经过测试发现如果是一样的只能同步一次,所以这里修正成0,0是可以每次都同步成功的)

 

(8)在salve数据库中启动服务,命令如下:start slave;

(9)在salve数据库中查看启动状态,命令如下:show slave status\G

(注意:看到Slave_IO_Running:Yes和Slave_SQL_Running:Yes之后就是成功啦)

 

最后就是利用navicat测试是否能够成功同步啦~

 

主从复制排错:

mark

使用start slave开启主从复制过程后,如果SlaveIORunning一直是Connecting,则说明主从复制一直处于连接状态,这种情况一般是下面几种原因造成的,我们可以根据 Last_IO_Error提示予以排除。

  1. 网络不通

    检查ip,端口

  2. 密码不对

    检查是否创建用于同步的用户和用户密码是否正确

  3. pos不对

    检查Master的 Position

 

参考来源:https://me.csdn.net/qq_33320785

https://www.cnblogs.com/songwenjie/p/9371422.html

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值