内容简介:一般情况下对数据库的操作都是读多写少,也就说对数据库读取数据的压力比较大,我们采用数据库集群的方案:设置一个主库,负责写数据,其它都是从库,负责读数据。目标:master:主
一般情况下对数据库的操作都是读多写少,也就说对数据库读取数据的压力比较大,我们采用数据库集群的方案:设置一个主库,负责写数据,其它都是从库,负责读数据。
目标:
- 读库和写库的数据一致
- 写数据必须写到写库
- 读数据必须到读库
2 mysql 主从复制原理
master:主
slave:从
- master将数据改变记录到二进制日志(binary log)中,也即是配置文件log-bin指定的文件(这些记录叫做二进制日志事件,binary log events)
- slave将master的binary log events拷贝到它的中继日志(relay log)
- slave重做中继日志中的事件,将改变反映它自己的数据(数据重演)
3 mysql配置主从复制
3.1 注意事项
主DB server和从DB server数据库的版本一致
主DB server和从DB server数据库数据一致
主DB server开启二进制日志,主DB server和从DB server的server_id都必须唯一
3.2 主库配置my.conf
#开启主从复制,主库的配置 log-bin = mysql-bin #指定主库serverid server-id=1 #指定同步的数据库,如果不指定则同步全部数据库 binlog-do-db=my_test 复制代码
#执行 SQL 语句查询状态 SHOW MASTER STATUS 复制代码
3.3 在主库创建同步用户
#授权用户slave01使用123456密码登录mysql grant replication slave on *.* to 'slave01'@'127.0.0.1' identified by '123456'; #刷新配置 flush privileges; 复制代码
3.4 从库配置文件my.conf
#指定serverid,只要不重复即可,从库也只有这一个配置,其他都在SQL语句中操作 server-id=2 复制代码
#以下执行SQL: CHANGE MASTER TO master_host='127.0.0.1', master_user='slave01', master_password='123456', master_port=3306, master_log_file='mysql-bin.000006', master_log_pos=1120; #启动slave同步 START SLAVE; #查看同步状态 SHOW SLAVE STATUS; 复制代码
4 搭建主库
- 创建目录与配置文件
#创建目录 mkdir /data/mysql/master01 cd /data/mysql/master01 mkdir conf data chmod 777 * -R #创建配置文件 cd /data/mysql/master01/conf vim my.cnf #输入如下内容 [mysqld] log-bin=mysql-bin #开启二进制日志 server-id=1 #服务id,不可重复 复制代码
- 启动docker
#创建容器 docker create --name percona-master01 -v /data/mysql/master01/data:/var/lib/mysql -v /data/mysql/master01/conf:/etc/my.cnf.d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root percona:5.7.23 #启动 docker start percona-master01 && docker logs -f percona-master01 复制代码
- 创建同步账户以及授权
#创建同步账户以及授权 create user 'name'@'%' identified by 'name'; grant replication slave on *.* to 'itcast'@'%'; flush privileges; #出现 [Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and错误解 决方案,在my.cnf配置文件中设置 sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO ,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' #查看master状态 show master status; #查看二进制日志相关的配置项 show global variables like 'binlog%'; #查看server相关的配置项 show global variables like 'server%'; 复制代码
5 搭建从库
- 创建目录与配置
#创建目录 mkdir /data/mysql/slave01 cd /data/mysql/slave01 mkdir conf data chmod 777 * -R #创建配置文件 cd /data/mysql/slave01/conf vim my.cnf #输入如下内容 [mysqld] server-id=2 #服务id,不可重复 sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO ,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' 复制代码
- 创建 docker 容器并启动容器
#创建容器 docker create --name percona-slave01 -v /data/mysql/slave01/data:/var/lib/mysql -v /data/mysql/slave01/conf:/etc/my.cnf.d -p 3307:3306 -e MYSQL_ROOT_PASSWORD=root percona:5.7.23 #启动 docker start percona-slave01 && docker logs -f percona-slave01 #设置master相关信息 CHANGE MASTER TO master_host='192.168.1.18', master_user='name', master_password='password', master_port=3306, master_log_file='mysql-bin.000002', master_log_pos=648; #启动同步 start slave; #查看master状态 show slave status; 复制代码
6 主从复制模式
show global variable like 'binlog%'; 复制代码
binlog_format 属性值默认为 ROW
- 基于SQL语句的复制(statement-based replication, SBR)
- 基于行的复制(row-based replication, RBR)
- 混合模式复制(mixed-based replication, MBR)。
- 对应的,binlog的格式也有三种:STATEMENT,ROW,MIXED。
修改配置:
#修改主库的配置 binlog_format=MIXED #重启 docker restart percona-master01 && docker logs -f percona-master01 #查看二进制日志相关的配置项 show global variables like 'binlog%'; 复制代码
此时可以测试同步功能
以上所述就是小编给大家介绍的《mysql主从复制详解一》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Chinese Authoritarianism in the Information Age
Routledge / 2018-2-13 / GBP 115.00
This book examines information and public opinion control by the authoritarian state in response to popular access to information and upgraded political communication channels among the citizens in co......一起来看看 《Chinese Authoritarianism in the Information Age》 这本书的介绍吧!