docker配置mysql主从_docker嵌套docker

docker配置mysql主从_docker嵌套docker1. 安装docker 这里可以参考菜鸟教程的CentOS安装docker , https://www.runoob.com/docker/centos-docker-install.html 2….

docker中Mylsq的主从搭建(超详细)一主多从

1. 安装docker

这里可以参考菜鸟教程的CentOS安装docker , https://www.runoob.com/docker/centos-docker-install.html

2. Docker中使用挂载模式安装mysql

          使用docker pull mysql:5.7.31,从docker仓库中拉取mysql5.7.31版本

            使用docker images 查看本地的docker镜像,这个IMAGE ID很重要,虽然docker可以用应用的名称来启动,但是我建议还是使用IMAGE ID,稳一手。

docker配置mysql主从_docker嵌套docker

          然后我们进入home目录(home目录是我自己的习惯,你们可以选择其他文件夹),创建以下的文件结构


home  

|                    ├ master

|                    |                    ├ my.cnf mysql外挂配置文件

|                    |                    ├ /mysql mysql数据以及日志文件存储地址

|               |                    ├ /conf.d mysql多配置文件存储地址(本文中未使用)

|                    ├ slave1

|                    |                    ├ my.cnf mysql外挂配置文件

|                    |                    ├ /mysql mysql数据以及日志文件存储地址

|               |                    ├ /conf.d mysql多配置文件存储地址(本文中未使用)

|                    ├ slave2

|                    |                    ├ my.cnf mysql外挂配置文件

|                    |                    ├ /mysql mysql数据以及日志文件存储地址

|               |                    ├ /conf.d mysql多配置文件存储地址(本文中未使用)

代码100分

            /home/master/my.cnf/home/slave1/my.cnf/home/slave2/my.cnf写入基础的mysql配置,这个步骤主要是要实现配置文件的挂载,稍后会写入主从的配置,写完my.cnf文件之后把文件权限设置为chmod 755 my.cnfchmod 777 mysql/chmod 777 conf.d/,否则docker无法读取文件和文件夹。

代码100分[mysqld]

user=mysql

datadir = /var/lib/mysql/data

character-set-server=utf8

default_authentication_plugin=mysql_native_password



[client]

default-character-set=utf8



[mysql]

default-character-set=utf8

运行命令

docker run –restart=always –privileged=true -d -v /home/mysql/master/mysql/:/var/lib/mysql -v /home/mysql/master/conf.d:/etc/mysql/conf.d -v /home/mysql/master/my.cnf:/etc/mysql/my.cnf -p 0.0.0.0:3307:3306/tcp –name mysql-master-dev -e MYSQL_ROOT_PASSWORD=123456 d05c76dbbfcf(这里替换成你自己的镜像源ID)

参数解析:

–restart 设置容器自动重启。

— privileged 设置容器内的bash用户权限为root

-v 挂载环境,后面携带的参数和你要挂载的mysql类型一致,例如Master使用master文件夹下的文件和文件夹,Slave用对应slave下的文件和文件夹。

-p 端口号,端口我们修改一下,Master使用3307Slave1使用3317Slave2使用3327

–name 容器名,docker容器的名字是唯一的,不可重复。

-e 容器启动参数,这里我们设置mysql的root用户密码

 

            启动完三个mysql之后,可以看一下我们在运行的容器 docker ps。可以看到我们的主从mysql都已经启动完毕了。

docker配置mysql主从_docker嵌套docker

3. 配置mysql的主从

      创建测试用的demo数据库,三个mysql中都创建,如果配置已有数据的数据库,则先停止mysqlMaster写入功能,将数据库备份至从库。

配置Master:编辑 /home/mysql/master/my.cnf文件

[mysqld]

user = mysql

datadir = /var/lib/mysql/data

character-set-server = utf8

default_authentication_plugin = mysql_native_password



#新增配置(记得把注解删掉,文本的编码不一致时,mysql无法识别配置文件)

#服务器ID,要求唯一,主从的server_id不能相同

server_id = 1

#log_bin文件地址(docker容器中地址)

log-bin = /var/lib/mysql/data/logs/mysql-bin

#需要同步的数据库,可以有多个

binlog-do-db = demo

#binlog-do-db=demo2

#开启Slave记录日志

log-slave-updates

#执行事物多少次之后,将执行sql记录到磁盘中

sync_binlog = 1

#自增偏移量:自增长字段从那个数开始,他的取值范围是

auto_increment_offset = 1

#自增步长:自增长字段每次递增的量

auto_increment_increment = 1

#日志清理时间(天)

expire_logs_days = 7

#信任存储函数创建者

log_bin_trust_function_creators = 1

#bin_log日志记录模式

#bin_log复制类型

#          Statement(默认格式):每一条会修改数据的 SQL 都会记录到 master 的 bin-log 中。slave 在复制的时候 SQL 进程会解析成和原来 master 端执行过的相同的 SQL 再次执行。

#          Row:日志中会记录成每一行数据被修改的形式,然后在 slave 端再对相同的数据进行修改。

#          Mixed:MySQL 会根据执行的每一条具体的 SQL 语句来区分对待记录的日志形式,也就是在 statement 和 row 之间选择一种。

binlog_format=mixed

#新增配置(记得把注解删掉,文本的编码不一致时,mysql无法识别配置文件)





[client]

default-character-set=utf8



[mysql]

default-character-set=utf8

            使用docker ps命令,查看Master主机的CONTAINER ID

            重启Master主机:docker restart cbff024b99f9(你自己的container id -t 1

            配置Slave:编辑/home/mysql/slave1/my.cnf文件

            使用docker ps命令,查看Slave主机的CONTAINER ID

            重启Slave1主机:docker restart cbff024b99f9(你自己的container id -t 1

代码100分[mysqld]

user=mysql

datadir = /var/lib/mysql/data

character-set-server=utf8

default_authentication_plugin=mysql_native_password

#新增配置(记得把注解删掉,文本的编码不一致时,mysql无法识别配置文件)

#与Master相同配置不再赘述

server_id = 2

log-bin = mysql-bin

log-slave-updates

sync_binlog = 0

innodb_flush_log_at_trx_commit = 0       

#从机复制那个库

replicate-do-db = demo     

#设置在多少秒没收到主库传来的Binary Logs events之后,从库认为网络超时,Slave IO线程会重新连接主库。

slave-net-timeout = 60                   

log_bin_trust_function_creators = 1

#新增配置(记得把注解删掉,文本的编码不一致时,mysql无法识别配置文件)





[client]

default-character-set=utf8



[mysql]

default-character-set=utf8

            同理,修改Slave2的配置。

           

            使用docker inspect cbff024b99f9(你自己的container id,

            查看MasterSlavedocker内的IP地址:

            docker配置mysql主从_docker嵌套docker

            可以看到MasterIPAddress172.17.0.2

            同理可得Slave1IPAddress172.17.0.3Slave2IPAddress172.17.0.4

            创建Slave的账号,登录Master机器,

            grant replication slave on *.* to “slave1Slave1用户名)“@”172.17.0.3Slave1IP地址)” identified by “123456Slave1密码)“;

grant replication slave on *.* to “slave2Slave2用户名)“@”172.17.0.4Slave2IP地址)” identified by “123456Slave2密码)“;

            flush privileges;

 

            然后查看Master的状态,show master status

docker配置mysql主从_docker嵌套docker

docker配置mysql主从_docker嵌套docker

            进入Slave1,执行

            change master to master_host=”172.17.0.2″,master_user=”slave1″,master_password=”123456″,master_log_file=”mysql-bin.000001″,master_log_pos=3379;

            master_log_file为刚刚查看主机状态的File值。

            master_log_pos为刚刚查看主机状态的Position值。

            Slave2同理

4. 测试主从

进入demo数据库,创建demo表,

CREATE TABLE `demo` (

  `id` int(11) NOT NULL AUTO_INCREMENT,

  `name` varchar(255) DEFAULT NULL,

  PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

insert into demo(name) values (“张三”),(“李四”)

 

然后查看slave1和slave2的demo表中数据,如果与mater中数据一致,则docker中主从搭建成功。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/6959.html

(0)
上一篇 2023-03-30
下一篇 2023-03-30

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注