docker搭建一个主从mysql数据库,一主一丛

搭建mysql主从同步

1.安装镜像

docker pull mysql:latest

下面配置文件难得写的话可以看这个里面的mysql_conf九问/conf_file - 码云 - 开源中国 (gitee.com)

2. 创建主数据库容器

2.1 在 opt目录下创建mysql_conf目录,在此目录下创建mysql_master目录,在此目录下 配置mysqld.cnf 文件,修改远程访问
#port          = 3307
# datadir       = /var/lib/mysql
user = root

# If MySQL is running as a replication slave, this should be
# changed. Ref https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_tmpdir
# tmpdir                = /tmp
#
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
bind-address            = 0.0.0.0
mysqlx-bind-address     = 127.0.0.1
#
# * Fine Tuning
#
key_buffer_size         = 16M
# max_allowed_packet    = 64M
# thread_stack          = 256K

# thread_cache_size       = -1

# This replaces the startup script and checks MyISAM tables if needed
# the first time they are touched
#myisam-recover-options  = BACKUP

# max_connections        = 151

# table_open_cache       = 4000

#
# * Logging and Replication
#
# Both location gets rotated by the cronjob.
#
# Log all queries
# Be aware that this log type is a performance killer.
# general_log_file        = /var/log/mysql/query.log
# general_log             = 1
#
# Error log - should be very few entries.
#
#log_error = /var/log/mysql/error.log
#
# Here you can see queries with especially long duration
# slow_query_log                = 1
# slow_query_log_file   = /var/log/mysql/mysql-slow.log
# long_query_time = 2
# log-queries-not-using-indexes
#
# The following can be used as easy to replay backup logs or for replication.
# note: if you are setting up a replication slave, see README.Debian about
#       other settings you may need to change.
# server-id             = 1
# log_bin                       = /var/log/mysql/mysql-bin.log
# binlog_expire_logs_seconds    = 2592000
max_binlog_size   = 100M
# binlog_do_db          = include_database_name
# binlog_ignore_db      = include_database_name

2.2 在 opt目录下创建mysql_conf目录,在此目录下创建mysql_master目录,在此目录下 配置my.cnf 文件,修改数据库端口,以及数据库名称
# Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; version 2 of the License.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA

#
# The MySQL  Server configuration file.
#
# For explanations see
# http://dev.mysql.com/doc/mysql/en/server-system-variables.html

[mysqld]
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
datadir         = /var/lib/mysql
secure-file-priv= NULL
port            = 3307
server_id=1
log-bin=mysql-bin
read-only=0
binlog-do-db=drf25

# Custom config should go here
#!includedir /etc/mysql/conf.d/

2.3 创建虚拟网络
docker network create mysql_network
2.4 创建主数据库容器
docker run -dti --network=mysql_network   -p 3307:3307 --name mysql_master  -v  /opt/mysql-master:/var/lib/mysql   -v  /opt/mysql_conf/mysql_master/my.cnf:/etc/mysql/my.cnf -v  /opt/mysql_conf/mysql_master/mysqld.cnf:/etc/mysql/conf.d/mysqld.cnf -e MYSQL_ROOT_PASSWORD=admin.123   mysql:latest
2.5 创建连接用户
2.5.1 进入容器内部
docker exec -it mysql_master bash 
2.5.2 创建用户
mysql -uroot -padmin.123 
创建用户。
CREATE USER 'user'@'%' IDENTIFIED BY 'user.123';
给用户绑定权限
GRANT REPLICATION SLAVE ON *.* TO 'user'@'%';
刷新权限
FLUSH PRIVILEGES;
修改用户密码的加密方式
alter user 'root'@'localhost' identified with mysql_native_password by 'admin.123';
刷新权限
FLUSH PRIVILEGES;
2.6 查看主数据库的状态
show master status\G 
获取显示的File Position的值

3.配置从数据库

3.1 在 mysql_conf目录下,创建mysql_salve_01目录,在此目录下 配置mysqld.cnf 文件,修改远程访问
#port          = 3307
# datadir       = /var/lib/mysql
user = root

# If MySQL is running as a replication slave, this should be
# changed. Ref https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_tmpdir
# tmpdir                = /tmp
#
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
bind-address            = 0.0.0.0
mysqlx-bind-address     = 127.0.0.1
#
# * Fine Tuning
#
key_buffer_size         = 16M
# max_allowed_packet    = 64M
# thread_stack          = 256K

# thread_cache_size       = -1

# This replaces the startup script and checks MyISAM tables if needed
# the first time they are touched
#myisam-recover-options  = BACKUP

# max_connections        = 151

# table_open_cache       = 4000

#
# * Logging and Replication
#
# Both location gets rotated by the cronjob.
#
# Log all queries
# Be aware that this log type is a performance killer.
# general_log_file        = /var/log/mysql/query.log
# general_log             = 1
#
# Error log - should be very few entries.
#
#log_error = /var/log/mysql/error.log
#
# Here you can see queries with especially long duration
# slow_query_log                = 1
# slow_query_log_file   = /var/log/mysql/mysql-slow.log
# long_query_time = 2
# log-queries-not-using-indexes
#
# The following can be used as easy to replay backup logs or for replication.
# note: if you are setting up a replication slave, see README.Debian about
#       other settings you may need to change.
# server-id             = 1
# log_bin                       = /var/log/mysql/mysql-bin.log
# binlog_expire_logs_seconds    = 2592000
max_binlog_size   = 100M
# binlog_do_db          = include_database_name
# binlog_ignore_db      = include_database_name
3.2 在mysql_salve_01目录下, 配置my.cnf 文件,修改数据库端口,以及数据库名称
# Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; version 2 of the License.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA

#
# The MySQL  Server configuration file.
#
# For explanations see
# http://dev.mysql.com/doc/mysql/en/server-system-variables.html

[mysqld]
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
datadir         = /var/lib/mysql
secure-file-priv= NULL
port            = 3308
server_id=1
log-bin=mysql-bin
read-only=0
binlog-do-db=drf25

# Custom config should go here
#!includedir /etc/mysql/conf.d/
3.3 创建从数据库容器
docker run -dti --network=mysql_network   -p 3308:3308 --name mysql_salve01  -v  /opt/mysql-salve01:/var/lib/mysql   -v  /opt/mysql_conf/mysql_salve_01/my.cnf:/etc/mysql/my.cnf -v  /opt/mysql_conf/mysql_salve_01/mysqld.cnf:/etc/mysql/conf.d/mysqld.cnf -e MYSQL_ROOT_PASSWORD=admin.123  mysql:latest
3.4 连接主数据库
3.4.1 进入从数据容器
docker exec -it mysql_salve01 bash 
3.4.2 连接主数据库

以下内容注意替换,MASTER_LOG_FILE和 MASTER_LOG_POS

CHANGE MASTER TO
  MASTER_HOST='mysql_master',
  MASTER_USER='user',
  MASTER_PASSWORD='user.123',
  MASTER_LOG_FILE='mysql-bin.000028',
  MASTER_LOG_POS=156,
  MASTER_PORT=3307,
  GET_MASTER_PUBLIC_KEY=1;
  
 master_host 主数据库的宿主机IP地址
master_port 主数据库运行的端口
master_user	主数据库中创建的用于数据同步的用户名
master_password	主数据库中创建的用于数据同步的密码
master_log_file	指定从数据库要复制数据的日志文件,在主数据库中通过show master status查看主数据库的状态,获取File参数
master_log_pos	指定从数据库要从哪个位置开始复制数据,在主数据库中通过show master status查看主数据库的状态,获取Position参数
master_connect_retry	连接主数据库失败重试的时间间隔,单位为秒
3.4.3 查看状态
START SLAVE;
SHOW SLAVE STATUS\G;

如果Slave_IO_Running,Slave_SQL_Running 都为Yes 说明主从同步搭建成功
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
基于DockerMySQL主从数据库配置需要完成以下步骤: 1. 启动Master()容器:使用命令`docker run -p 3306:3306 --name main_mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7`启动一个MySQL容器,并设置容器名称为main_mysql,密码为123456。 2. 连接到Master()容器:使用命令`docker exec -it main_mysql bash`进入Master()容器的命令行界面。 3. 配置Master():在Master()容器内部,编辑MySQL配置文件`my.cnf`,将`bind-address`设置为Master()容器的IP地址。 4. 重启Master()容器:使用命令`docker restart main_mysql`重启Master()容器使配置生效。 5. 启动Slave(从)容器:使用命令`docker run -p 3340:3306 --name slave_mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7`启动一个MySQL容器,并设置容器名称为slave_mysql,密码为123456。 6. 连接到Slave(从)容器:使用命令`docker exec -it slave_mysql bash`进入Slave(从)容器的命令行界面。 7. 配置Slave(从):在Slave(从)容器内部,编辑MySQL配置文件`my.cnf`,将`bind-address`设置为Slave(从)容器的IP地址,并添加以下配置: ``` server-id = 2 relay-log = /var/lib/mysql/mysql-relay-bin relay-log-index = /var/lib/mysql/mysql-relay-bin.index log_slave_updates = 1 ``` 8. 重启Slave(从)容器:使用命令`docker restart slave_mysql`重启Slave(从)容器使配置生效。 9. 在Slave(从)容器内部执行以下命令连接到Master()容器并设置复制: ``` CHANGE MASTER TO MASTER_HOST='<Master()容器的IP地址>', MASTER_USER='root', MASTER_PASSWORD='123456', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=0; ``` 10. 启动复制:在Slave(从)容器内部执行命令`START SLAVE;`启动主从复制。 11. 检查主从复制状态:在Slave(从)容器内部执行命令`SHOW SLAVE STATUS\G;`,确保"Slave_IO_Running"和"Slave_SQL_Running"都为"YES",表示主从复制已成功配置。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

吾有所爱,其名华夏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值