内容简介:一般情况下对数据库的操作都是读多写少,也就说对数据库读取数据的压力比较大,我们采用数据库集群的方案:设置一个主库,负责写数据,其它都是从库,负责读数据。目标: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主从复制详解一》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。