制作网站商,英文定机票网站建设,seo优化是指通过研究搜索引擎排名规则,网络营销思路mysql在服务器中的主从复制Linux下 为什么要进行主从复制主从复制的原理主从复制执行流程操作步骤主库创建从库创建 测试 为什么要进行主从复制
在业务中通常会有情况#xff0c;在sql执行时#xff0c;将表锁住#xff0c;导致不能进行查询#xff0c;这样就会影响业务的… mysql在服务器中的主从复制Linux下 为什么要进行主从复制主从复制的原理主从复制执行流程操作步骤主库创建从库创建 测试 为什么要进行主从复制
在业务中通常会有情况在sql执行时将表锁住导致不能进行查询这样就会影响业务的正常运行这个时候可以使用主从复制用主库负责写用从库进行读这样即使出现锁表的情况也不影响正常的业务。主从复制可以进行数据的热备份主库宕机后从库可以切换保证业务的正常执行。架构的扩展。业务量越来越大I/O访问频率过高单机无法满足此时做多库的存储降低磁盘的I\O提高单个库的性能。
主从复制的原理 主数据库 MySQL主从复制是一个异步的复制过程主库发送更新事件到从库从库读取更新记录并执行更新记录使得从库的内容与主库保持一致。 binlog主库中保存所有更新事件日志的二进制文件。binlog是数据库服务启动的一刻起保存数据库所有变更记录数据库结构和内容的文件。 从数据库 在从库中当复制开始时从库就会创建从库I/O线程和从库的SQL线程进行复制处理。 从库I/O线程当START SLAVE语句在从库开始执行之后从库创建一个I/O线程该线程连接到主库并请求主库发送binlog里面的更新记录到从库上。 从库I/O线程读取主库的binlog输出线程发送的更新并拷 贝这些更新到本地文件其中包括relay log文件。
主从复制执行流程
主库db的更新事件(update、insert、delete)被写到binlog的日志中去从库启动并发起连接连接到主库主库创建一个binlog dump thread把binlog的内容发送到从库从库启动之后创建一个I/O线程读取主库传过来的binlog内容并写入到relay log从库启动之后创建一个SQL线程从relay log里面读取内容从Exec_Master_Log_Pos位置开始执行读取到的更新事件将更新内容写入到slave的db
此案例中规定主库端口号为3306从库为3307
操作步骤
主库创建
在操作之前先安装dockerLinux中有然后在docker中获取mysql8的镜像
docker pull daocloud.io/library/mysql:8.0.16查看mysql是否安装
docker images创建环境目录
1、进入usr下的local下
cd /usr/local
2、创建mysql目录
mkdir mysql
3、进入mysql目录
cd mysql
4、创建master-data目录
mkdir ,aster-data主mysql容器运行
mysql]# docker run --name mysql-master --privilegedtrue -v /usr/local/mysql/master-data:/var/lib/mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORDroot -d (docker image中的imageId) --character-set-serverutf8 --server-id1 --lower_case_table_names1参数 –privileged指定了当前容器是否真正的具有root权限 -p表示宿主机上的某个端口映射到docker容器内的某个端口 -d参数指定了当前容器是在后台运行 –server-id 设置服务器的编号主从复制的每一个服务的编号都不能相同 配置mysql权限账户
docker exec -it mysql-master /bin/bash登录主服务器mysql
mysql -uroot -p
注此时密码为root修改密码和设置从服务器登录用户
ALTER USER root% IDENTIFIED WITH mysql_native_password BY 123456;
ALTER USER rootlocalhost IDENTIFIED WITH mysql_native_password BY 123456;
CREATE USER slave_one% IDENTIFIED WITH mysql_native_password BY 123456;
GRANT REPLICATION SLAVE ON *.* TO slave_one%;查看主mysql的master节点的binlog状态
show master status;至此主服务器搭建完毕下面开始搭建从服务器
从库创建
创建环境目录
cd /usr/local/mysql
mkdir slave_one-data从mysql容器运行
docker run --name mysql-slave_one --privilegedtrue -v /usr/local/mysql/slave_one-data:/var/lib/mysql -p 3307:3306 --link mysql-master:master -e MYSQL_ROOT_PASSWORDroot -d df8662dadd4f --character-set-serverutf8 --server-id2 --lower_case_table_names1配置mysql权限账户
docker exec -it mysql-slave_one /bin/bash登录从服务器mysql
mysql -uroot -p
注密码为root修改密码登录用户
ALTER USER root% IDENTIFIED WITH mysql_native_password BY 123456;
ALTER USER rootlocalhost IDENTIFIED WITH mysql_native_password BY 123456;
flush privileges;切换当前服务的状态使其能够连接上master服务器并且复制其数据
change master to master_hostmaster, master_userslave_one, master_password123456, master_port3306, master_log_filebinlog.000002, master_log_pos1409, master_connect_retry30;解释
change master to master_hostmaster, master_userslave_one, master_password123456,
master_port3306, master_log_filemaster中binlog日志文件名, master_log_posmaster中binlog日志位置,
master_connect_retry30;启动日志同步
start slave;查看状态
show slave status\G;测试
在测试之前首先要保证服务器中的3306he3307的两个端口号防火墙开启 连接两个数据库
主数据库连接 从数据库连接 主库中的数据
从库不做任何库、表、数据的操作刷新后有相同的数据 测试成功。