MySQL持久化数据——主从分离 & Linux下创建2个MySQL的Docker容器 & 挂载方式启动 & 配置主从_linux创建创建mysql容器

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以点击这里获取!

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

(1)master主库将改变记录,发送到二进制文件(binary log)中

(2)slave从库向mysql Master发送dump协议,将master主库的binary log events拷贝到它的中继日志(relay log)

(3)slave从库读取并重做中继日志中的事件,将改变的数据同步到自己的数据库

canal的工作原理:把自己伪装成slave,从master复制数据。读取binlog是需要master授权的,因为binlog是加密的,授权分用户名密码才能读。master授权后不知道读他的binlog的是从机还是canal,他的所有传输协议都符合从机的标准,所以master一直以为是从机读的。

在这里插入图片描述

0.在宿主机centos创建主的文件夹

[root@192 software]# mkdir -p 3310/conf
[root@192 software]# mv 3310 mysql
[root@192 software]# cd mysql/
[root@192 mysql]# mkdir -p 3310/data
[root@192 mysql]# cp -r 3310 3306
[root@192 mysql]# ls
3306  3310

在这里插入图片描述

在这里插入图片描述

1.拷贝my.cnf配置文件

容器内配置文件的位置/etc/my.conf,拷贝到centos

[root@192 mysql]# docker cp mysql_3306_try:/etc/my.cnf my.cnf
[root@192 mysql]# mv conf ./3310/conf/
[root@192 mysql]# ls
3306  3310

容器内配置文件的位置/etc/my.cnf,拷贝到centos下
使用上传的配置文件my.cnf

[root@localhost conf]# docker cp mysql_3306:/etc/my.cnf ./
[root@localhost conf]# ls
my.cnf

在这里插入图片描述

2.挂载方式启动主mysql

在mysql的docker容器中/var/lib/mysql是存放数据的地方;/etc/mysql/my.conf是配置文件的位置;

-v相当于挂载,冒号:前面是宿主机,相当于centos,

docker run -itd --name mysql_3306_main --privileged=true -p 3306:3306 -v /root/software/mysql/3306/data:/var/lib/mysql -v /root/software/mysql/3306/conf/my.cnf:/etc/mysql/my.cnf -v /root/software/mysql/3306/mysql-files:/var/lib/mysql-files -e MYSQL\_ROOT\_PASSWORD=123 mysql

在这里插入图片描述
-v后面是centos的路径

在这里插入图片描述

在这里插入图片描述

3.修改my.cnf文件的权限

chmod 777 my.cnf

在这里插入图片描述

chmod命令

在这里插入图片描述

【bug】mysql: [ERROR] unknown variable ‘server-id=200’.

在这里插入图片描述

网上的解决方案,失败

https://blog.csdn.net/zcbdandan/article/details/89500578

在这里插入图片描述

3.修改主的my.cof文件

主的my.conf文件配置

server-id=201
log-bin=mysql-bin
binlog_format=row

在这里插入图片描述

然后再重启一下:

docker restart mysql_3306_main

4.创建主从账号slave

docker exec -it mysql_3306_main bash

mysql> create user 'slave'@'%' identified by '123';
Query OK, 0 rows affected (0.00 sec)

mysql> grant replication slave,replication client on \*.* to 'slave'@'%';
Query OK, 0 rows affected (0.01 sec)

mysql> alter user 'slave'@'%' identified with mysql\_native\_password by '123';
Query OK, 0 rows affected (0.01 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)


在这里插入图片描述
在这里插入图片描述

出现加密方式异常的选择以下处理方案:由于mysql8.x的密码加密方式改变,如果之后主从出现问题,需要修改密码加密方式,如果之前在mysql_3306中设置过的则可以跳过此处。

进入mysql的主服务器:

[root@localhost ~]# docker exec -it mysql_3306 bash
mysql> use mysql
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> ALTER USER 'slave'@'%' IDENTIFIED WITH mysql_native_password BY '123';

5.获取主master容器状态

mysql> show master status
    -> ;
+---------------+----------+--------------+------------------+-------------------+
| File          | Position | Binlog\_Do\_DB | Binlog\_Ignore\_DB | Executed\_Gtid\_Set |
+---------------+----------+--------------+------------------+-------------------+
| binlog.000010 |     1162 |              |                  |                   |
+---------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

mysql> 

在这里插入图片描述
在这里插入图片描述

5.获取主mysql_master的ip地址

在这里插入图片描述

docker inspect mysql_3306

[root@192 conf]# docker inspect mysql_3306_main | grep IPA
            "SecondaryIPAddresses": null,
            "IPAddress": "172.17.0.3",
                    "IPAMConfig": null,
                    "IPAddress": "172.17.0.3",
[root@192 conf]# 


在这里插入图片描述

序列名称
1日志文件:filemysql-bin.000002
2日志文件位置:Position95744
3主服务器的ip172.17.0.2

0.在宿主机centos创建从的文件夹

在这里插入图片描述

6.从mysql数据库修改启动的my.cnf文件

要点:

  • 打开读写权限
  • 进行修改vim,添加
server-id=202
relay_log=edu-mysql-relay-bin
read-only=1


在这里插入图片描述

在这里插入图片描述

7.挂载方式启动从mysql

docker run -itd --name mysql_3310_slave --privileged=true -p 3310:3306 -v /root/software/mysql/3310/data:/var/lib/mysql -v /root/software/mysql/3310/conf/my.cnf:/etc/mysql/my.cnf -v /root/software/mysql/3310/mysql-files:/var/lib/mysql-files -e MYSQL\_ROOT\_PASSWORD=123 mysql

在这里插入图片描述

8.进入从mysql配置主从关系

"IPAddress": "172.17.0.3",

mysql> show master status
    -> ;
+---------------+----------+--------------+------------------+-------------------+
| File          | Position | Binlog\_Do\_DB | Binlog\_Ignore\_DB | Executed\_Gtid\_Set |
+---------------+----------+--------------+------------------+-------------------+
| binlog.000010 |     1162 |              |                  |                   |
+---------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

change master to master\_host='172.17.0.3',master_user='slave',master_password='123',MASTER\_LOG\_FILE='binlog.000013',MASTER\_LOG\_POS=157

在这里插入图片描述

在这里插入图片描述

show variables like 'server_id';

在这里插入图片描述

问题记录:

1.主从的sercer-id一致报错

Last_IO_Error: Fatal error: The replica I/O thread stops because source and replica have equal MySQL server ids; these ids must be different for replication to work (or the --replicate-same-server-id option must be used on replica but this does not always make sense; please check the manual before using it).

在这里插入图片描述
在这里插入图片描述

报错原因:

可能是之前的挂载启动方式没有生效,导致server-id都是1,冲突,IO线程没有启动成功;因此在容器内直接修改server_id,尝试后修改成功;

解决方案:

用到的相关代码如下:

mysql> change master to master\_host='172.17.0.3',master_user='slave',master_password='123',MASTER\_LOG\_FILE='binlog.000013',MASTER\_LOG\_POS=157;
mysql> start slave;
mysql> show slave status \G
mysql> SET GLOBAL server_id = 123
    -> ;
mysql>  show variables like 'server_id';
+---------------+-------+
| Variable\_name | Value |
+---------------+-------+
| server_id     | 123   |
+---------------+-------+
1 row in set (0.00 sec)

mysql> stop slave;
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> start slave;
Query OK, 0 rows affected, 1 warning (0.01 sec)

mysql> show slave status \G
\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\* 1. row \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
               Slave\_IO\_State: Waiting for source to send event
                  Master\_Host: 172.17.0.3
                  Master\_User: slave
                  Master\_Port: 3306
                Connect\_Retry: 60
              Master\_Log\_File: binlog.000013
          Read\_Master\_Log\_Pos: 157
               Relay\_Log\_File: 52d169c47849-relay-bin.000003
                Relay\_Log\_Pos: 323
        Relay\_Master\_Log\_File: binlog.000013
             Slave\_IO\_Running: Yes
            Slave\_SQL\_Running: Yes


在这里插入图片描述
在这里插入图片描述

最后的话

最近很多小伙伴找我要Linux学习资料,于是我翻箱倒柜,整理了一些优质资源,涵盖视频、电子书、PPT等共享给大家!

资料预览

给大家整理的视频资料:

给大家整理的电子书资料:

如果本文对你有帮助,欢迎点赞、收藏、转发给朋友,让我有持续创作的动力!

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以点击这里获取!

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

资源,涵盖视频、电子书、PPT等共享给大家!

资料预览

给大家整理的视频资料:

[外链图片转存中…(img-vDsylYYr-1715837807345)]

给大家整理的电子书资料:

[外链图片转存中…(img-ykQTfVSP-1715837807346)]

如果本文对你有帮助,欢迎点赞、收藏、转发给朋友,让我有持续创作的动力!

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以点击这里获取!

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值