网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事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 | 日志文件:file | mysql-bin.000002 |
2 | 日志文件位置:Position | 95744 |
3 | 主服务器的ip | 172.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行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!