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;

posted @ 2023-08-22 20:30  刹爵  阅读(44)  评论(0)    收藏  举报