mysql主从搭建

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;
    
    
# 第七步:在主库创建库,创建表,插入数据,看从库

posted @ 2023-08-29 17:02  星空看海  阅读(40)  评论(0编辑  收藏  举报