MySQL主从搭建

一 原理

步骤一:主库db的更新事件(update、insert、delete)被写到binlog(二进制日志)

步骤二:从库发起连接,连接到主库

步骤三:此时主库创建一个binlog dump thread线程,把binlog的内容发送到从库

步骤四:从库启动之后,创建一个I/O线程,读取主库传过来的binlog内容并写入到relay log(中继日志).

步骤五:还会创建一个SQL线程,从relay log里面读取内容,从Exec_Master_Log_Pos位置开始执行读取到的更新事件,将更新内容写入到slave的db.

 

二 搭建步骤 :准备两台机器 (mysql的docker镜像模拟两台机器)

第一步:拉取mysql5.7的镜像

第二步:创建文件夹,文件(目录映射)

# 主 mkdir /home/mysql mkdir /home/mysql/conf.d mkdir /home/mysql/data/ touch /home/mysql/my.cnf # ---------------------------------- # 从 mkdir /home/mysql1 mkdir /home/mysql1/conf.d mkdir /home/mysql1/data/ touch /home/mysql1/my.cnf

 第三步(重要):编写mysql配置文件(主,从)

 #### 主的配置####

[mysqld] user=mysql character-set-server=utf8 default_authentication_plugin=mysql_native_password secure_file_priv=/var/lib/mysql expire_logs_days=7 sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION max_connections=1000 server-id=100 log-bin=mysql-bin [client] default-character-set=utf8 [mysql] default-character-set=utf8

#### 从库的配置#####

[mysqld] user=mysql character-set-server=utf8 default_authentication_plugin=mysql_native_password secure_file_priv=/var/lib/mysql expire_logs_days=7 sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION max_connections=1000 server-id=101 log-bin=mysql-slave-bin relay_log=edu-mysql-relay-bin [client] default-character-set=utf8 [mysql] default-character-set=utf8

第三步:启动mysql容器,并做端口和目录映射

# 主 docker run -di -v /home/mysql/data/:/var/lib/mysql -v /home/mysql/conf.d:/etc/mysql/conf.d -v /home/mysql/my.cnf:/etc/mysql/my.cnf -p 33307:3306 --name mysql-master -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7 # 从 docker run -di -v /home/mysql1/data/:/var/lib/mysql -v /home/mysql1/conf.d:/etc/mysql/conf.d -v /home/mysql1/my.cnf:/etc/mysql/my.cnf -p 33306:3306 --name mysql-slave -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7

第四步:连接主库

mysql -uroot -P端口 -h 地址 -p

在主库创建用户并授权

## 创建test用户 create user '用户名'@'主机名' identified by '密码'; ## 授权用户 grant all privileges on *.* to '用户名'@'主机名' ; ### 刷新权限 flush privileges; # 查看主服务器状态(显示如下图) show master status;

 

第五步:连接从库

mysql -uroot -P端口 -h 地址 -p

#配置详解

''' change master to master_host='MySQL主服务器IP地址', master_user='之前在MySQL主服务器上面创建的用户名', master_password='之前创建的密码', master_log_file='MySQL主服务器状态中的二进制文件名', master_log_pos='MySQL主服务器状态中的position值'; ''' change master to master_host='地址',master_port=端口,master_user='用户名',master_password='密码',master_log_file='主库bin日志',master_log_pos=0;

启用从库

start slave;

查看从库状态(如下图):G是以json格式显示

show slave status\G;


__EOF__

本文作者刹爵
本文链接https://www.cnblogs.com/shajue/p/17649637.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   刹爵  阅读(35)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示