docker 搭建mysql主从结构
发布日期:2022-02-07 06:39:41 浏览次数:10 分类:技术文章

本文共 4566 字,大约阅读时间需要 15 分钟。

环境: ubuntu 18.04

      docker 18.03.1-ce
      mysql 5.7.9

1.拉取docker镜像文件

 docker pull mysql:5.7.9

拉取完成后,执行docker images查看镜像是否拉取完成

2.首先启动mysql镜像文件:

 *************mysql主节点*******************

docker run --name mysql01 \
-p 3306:3306 \
-h mysql01 \
-v mysql_data_1:/var/lib/mysql \
-v mysql_conf_1:/etc/mysql/ \
-e MYSQL_ROOT_PASSWORD=root -d mysql:5.7.9

****************mysql从节点***********************

docker run --name mysql02 \
-p 3307:3306 \
-h mysql02 \
-v mysql_data_2:/var/lib/mysql \
-v mysql_conf_2:/etc/mysql/ \
-e MYSQL_ROOT_PASSWORD=root -d mysql:5.7.9

3.通过docker ps查看镜像是否启动成功,可以通过以下命令进入mysql容器

docker exec -it mysql01 bash 进入容器 mysql -uroot -proot进入mysql
如果没有问题,则停止mysql容器修改配置文件,执行以下命令
docker stop mysql01 mysql02

4.修改配置文件

cd /var/lib/docker/volumes/ 目录下
修改mysql01的配置文件
cd /var/lib/docker/volumes/mysql_conf_1/_data
vim my.cnf
**************************************************************************************************
# Copyright (c) 2014, 2015, 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 Community Server configuration file.
#
# For explanations see
# http://dev.mysql.com/doc/mysql/en/server-system-variables.html

[client]

default-character-set = utf8
port            = 3306
socket          = /var/run/mysqld/mysqld.sock

[mysqld_safe]

pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
nice            = 0

[mysqld]

skip-host-cache
skip-name-resolve
user            = mysql
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
port            = 3306
basedir         = /usr
datadir         = /var/lib/mysql
tmpdir          = /tmp
lc-messages-dir = /usr/share/mysql
explicit_defaults_for_timestamp
lower_case_table_names = 1
max_connections = 1000
character-set-server = utf8

# Instead of skip-networking the default is now to listen only on

# localhost which is more compatible and is not less secure.
#bind-address   = 127.0.0.1

#log-error      = /var/log/mysql/error.log

# Disabling symbolic-links is recommended to prevent assorted security risks

symbolic-links=0

# * IMPORTANT: Additional settings that can override those from this file!

#   The files must end with '.cnf', otherwise they'll be ignored.
#
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER
# log_bin,必须开启 bin 日志.
log_bin=master-bin.log
# These are commonly set, remove the # and set as required.
# basedir = .....
# datadir = .....
# port = .....
# server_id = .....必须设置 server_id,保证集群内的唯一性.可以用 ip 地址最后 3 位
server_id = 106
# socket = .....
#所有事务提交必须写入硬盘
innodb_flush_log_at_trx_commit=1
#必须同步 bin 日志
sync_binlog=1
binlog_format=mixed
max_connections=1000
relay-log=master-relay-bin
#master-info-repository=table
#relay-log-info-repository=table
relay-log-recovery=1
!includedir /etc/mysql/conf.d/
**************************************************************************************************
修改mysql02的配置文件
cd /var/lib/docker/volumes/mysql_conf_2/_data
vim my.cnf
和上边基本一致,只需要修改server_id即可

5.重新启动mysql容器

docker restart mysql02 mysql02
然后通过docker ps 查看容器是否成功启动

6.配置mysql主从应用

1)配置主节点

docker exec -it mysql01 bash
进入到mysql01容器中,登录mysql的root用户
mysql -uroot -proot
然后创建用户并赋权,这里表示创建一个slaver同步账号topcom,允许访问的IP地址为%,%表示通配符
GRANT REPLICATION SLAVE,reload,super ON *.* to 'topcom'@'%' identified by 'topcom123';
flush PRIVILEGES;

查看状态,记住File、Position的值,在Slaver中将用到

show master status;

2)配置从节点

docker exec -it mysql02 bash
进入到mysql02容器中,登录mysql的root用户
启动mysql命令,刚在创建窗口时我们把密码设置为root
mysql -uroot -proot

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

change master to master_host='192.168.0.211',master_user='topcom',master_password='topcom123',master_log_file='master-bin.000003',master_log_pos=0,master_port=3306;

启动从库同步

start slave;

查看状态

show slave status\G;
以下数字为Yes,即为完成部署
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

7.给用户赋权,测试

登录到mysql01的root用户下
创建的用户赋予一定权限
GRANT ALL PRIVILEGES ON *.* to 'topcom'@'%' identified by 'topcom123';
flush PRIVILEGES;

在topcom用户下创建数据库,mysql01和mysql02都会有,mysql01和mysql02的数据实时同步

转载地址:https://blog.csdn.net/wyfsxs/article/details/82746434 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:C++概述(二)
下一篇:docker-streamsets安装

发表评论

最新留言

第一次来,支持一个
[***.219.124.196]2024年04月20日 19时50分23秒