mysql主从搭建
一 概念
1.1 主从原理
# 之前做过redis的主从,很简单
# mysql 稍微复杂一些, 搭建mysql主从的目的是?
-读写分离
-单个实例并发量低,提高并发量
-只在主库写,读数据都去从库---->读多写少
1.2 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主从搭建
# 搭建步骤 :准备两台机器 (mysql的docker镜像模拟两台机器)
-主库:8.130.125.9 33307
-从库:8.130.125.9 33306
# 第一步:拉取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配置文件(主,从)
### 配置介绍
server-id=100 # 主库跟从库都需要写一个server-id号,且需要不同
log-bin=mysql-bin # 主库的binlog二进制日志
server-id=101 # 从库中的server-id号
log-bin=mysql-slave-bin # 从库的binlog二进制日志
relay_log=edu-mysql-relay-bin # 中继日志
#### 主库的配置####
[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 -P33307 -h 10.0.0.102 -p
#在主库创建用户并授权
##创建test用户
create user 'test'@'%' identified by '123';
##授权用户
grant all privileges on *.* to 'test'@'%' ;
###刷新权限
flush privileges;
#查看主服务器状态(显示如下图)
show master status;
# 第六步:连接从库
mysql -uroot -P33306 -h 10.0.0.102 -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='8.130.125.9',master_port=33307,master_user='test',master_password='123',master_log_file='mysql-bin.000003',master_log_pos=0;
#启用从库
start slave;
#查看从库状态(如下图)
show slave status\G;
# 第七步:在主库创建库,创建表,插入数据,看从库