mysql主从配置

mysql主从介绍

  • mysql主从又叫做Repication或者是AB复制。简单讲,就是A、B2台机器做主从后,在A(master)上写数据,B机器也会跟着写数据,二者数据实时同步。

  • mysql主从是基于binlog的,主上须开启binlog才能进行主从。

    -主从过程大致有3个步骤
    (1)主将更改操作记录到binlog里面
    (2)从将主的binlog事件(sql语句)同步到从上并记录在relaylog里面
    (3)从根据relaylog里面的sql语句按顺序执行

  • 主上有一个log dump线程,用来和从的I/O线程转递binlog

    -从上有二个线程,其中I/O线程用来同步主的binlog并生成relaylog,另外一个SQL线程用来将relaylog里面的sql语句执行一遍

  • 原理图
    这里写图片描述

  • 应用场景
    (1)主上进行读写操作,从上只是单纯的做一个备份
    (2)主上进行写操作,从上进行读操作,减轻主库的压力。

  • 准备2台都安装了mysql的机器进行主从配置


配置主

  • 修改主配置文件/etc/my.cnf,修改如下

[mysqld]
datadir=/data/mysql
socket=/tmp/mysql.sock
server-id=130
log_bin=zcy1

server-id=xxx /自定义
log_bin= xxx /binglog前缀

  • 修改完后重启mysql,在/data/mysql下会生成2个已自定义log_bin为前缀的 文件
[root@localhost mysql]# ls  -l 
总用量 110636
-rw-rw----. 1 mysql mysql       56 428 01:09 auto.cnf
-rw-rw----. 1 mysql mysql 12582912 430 23:44 ibdata1
-rw-rw----. 1 mysql mysql 50331648 430 23:44 ib_logfile0
-rw-rw----. 1 mysql mysql 50331648 428 01:04 ib_logfile1
-rw-rw----. 1 mysql mysql    15658 430 23:44 localhost.localdomain.err
-rw-rw----. 1 mysql mysql        5 430 23:44 localhost.localdomain.pid
drwx------. 2 mysql mysql     4096 4月  28 01:04 mysql
drwx------. 2 mysql mysql     4096 4月  28 01:04 performance_schema
drwx------. 2 mysql mysql        6 4月  28 01:04 test
-rw-rw----. 1 mysql mysql      120 430 23:44 zcy1.000001
-rw-rw----. 1 mysql mysql       14 430 23:44 zcy1.index
drwx------. 2 mysql mysql     4096 4月  29 21:38 zrlog

其中zcy1.000001为二进制文件的第一个,后面还会继续生成。

zcy1.index 这个文件的索引,是必须要有的

如果没有这2个文件,主从是不能完成的。
  • 备份测试目录
/usr/local/mysql/bin/mysqldump -uroot  zrlog > /tmp/zrlog.sql
  • 创建新的数据库,并将备份的目录导入新创建的数据库中
mysql -uroot  -e "create database test1"

mysql -uroot test1 < /tmp/zrlog.sql

现在做主从操作的就是test1这个库。

  • 可以看到zcy.000001(bin_log)文件大小发生了变化,bin_log里面完整了记录了库的创建过程。使用通过zcy.000001(bin_log)是可以去恢复这个数据库中的数据,前提是bin_log需要完整。

    -创建用作同步数据的用户(进入mysql中操作)

grant replication slave on *.* to 'repl'@'192.168.244.135' identified by 'zchuny123';

这里IP填写从的IP
这里写图片描述

  • 锁住表,不让它再继续写入数据,保证数据一致
flush tables with read lock;
  • 查看信息
mysql> show master status;
+-------------+----------+--------------+------------------+-------------------+
| File        | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-------------+----------+--------------+------------------+-------------------+
| zcy1.000001 |    10616 |              |                  |                   |
+-------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

记录File | Position信息,后面会使用到,退出mysql

  • 查看主上都有哪些库,为了跟生常环境中一样,需要同步所有的库,mysql库除外。

配置从

##

  • 查看my.cnf进行配置,在其中添加server-id=135 (定义的值需要和主上不相同)
# These are commonly set, remove the # and set as required.
 basedir = /usr/local/mysql
 datadir = /data/mysql
# port = .....
# server_id = .....
# socket = .....
server-id=135  //添加内容

bin_log不需要配置,只有主上才需要这个2进制文件。

重启mysql服务

  • 将j主上的sql传输到从上,并进行恢复
scp 192.168.244.139:/tmp/*.sql  /tmp/
  • 进行到数据库中,创建库
 create database zrlog;

  • 恢复主上复制过来的sql文件到新创建的库中
mysql -uroot zrlog < /tmp/zrlog.sql

然后查看主和从上/data/mysql目录下是否是一样的

  • 进入mysql,执行以下命令
stop slave ; 

change master to master_host='192.168.244.139', master_user='repl', master_password='zchuny123', master_log_file='zcy1.000001',mastster_log_pos=10616;


 start slave;

  • 判定主从配置是否成功
show  slave status\G  //
查看信息是否有 Slave_IO_Running: Yes
            Slave_SQL_Running: Yes

如果其中有一个NO,说明主从已经断开了。 这时候主从已经建立

  • 主上表恢复写操作(mysql 中进行)
unlock tables;

测试主从同步

  • 关于/etc/my.cnf中参数解释
    这里写图片描述
    这些参数默认是没有配置的,那默认是会同步所有的库
replicate_ignore_table=aming.db1 
它过滤的是库名字,只有过滤到use aming 这个语句时,才会忽略后面的sql语句。如果sql语句中用的是aming.tb1,则不会忽略这条语句的。

建议在从库中使用replicate-wild-ignore-table=dbname.%的参数对数据库表的过滤。

使用replicate_do_db和replicate_ignore_db时有一个隐患,跨库更新时会出错。

如在Master(主)服务器上设置 replicate_do_db=test(my.conf中设置)
use mysql;
update test.table1 set ……
那么Slave(从)服务器上第二句将不会被执行

如Master设置 replicate_ignore_db=mysql
use mysql;
update test.table1 set ……
那么Slave上第二句会被忽略执行

原因是设置replicate_do_db或replicate_ignore_db后,MySQL执行sql前检查的是当前默认数据库,所以跨库更新语句在Slave上会被忽略。

可以在Slave上使用 replicate_wild_do_table 和 replicate_wild_ignore_table 来解决跨库更新的问题,如:
replicate_wild_do_table=test.%

replicate_wild_ignore_table=mysql.%

  • 测试主从是否真的成功
    (1)在主上创建一个库,那么从上也应该是可以看到新创建的这个库的,当删除这个库时,那么从上的库也会消失
    (2)一旦我们不小心在从上写了数据,那么主从复制也就被破坏了。
    (3)如果要重启master,务必先关闭slave(即 stop slave),然后再去重启master的mysql服务,否则主从复制很有可能就会中断。当然重启master后,还需要执行start slave命令开启主从复制服务
    (4) 如果主从复制时因为在从上进行了写操作而中断,那么只能重新进行在主上执行show master status; 查看Position的值,然后在从上stop slave 后重新进行change master to 这步,再start slave 后查看show slave status\G
1. 用户与权限管理模块 角色管理: 学生:查看实验室信息、预约设备、提交耗材申请、参与安全考核 教师:管理课题组预约、审批学生耗材申请、查看本课题组使用记录 管理员:设备全生命周期管理、审核预约、耗材采购与分发、安全检查 用户操作: 登录认证:统一身份认证(对接学号 / 工号系统,模拟实现),支持密码重置 信息管理:学生 / 教师维护个人信息(联系方式、所属院系),管理员管理所有用户 权限控制:不同角色仅可见对应功能(如学生不可删除设备信息) 2. 实验室与设备管理模块 实验室信息管理: 基础信息:实验室编号、名称、位置、容纳人数、开放时间、负责人 功能分类:按学科(计算机实验室 / 电子实验室 / 化学实验室)标记,关联可开展实验类型 状态展示:实时显示当前使用人数、设备运行状态(正常 / 故障) 设备管理: 设备档案:名称、型号、规格、购置日期、单价、生产厂家、存放位置、责任人 全生命周期管理: 入库登记:管理员录入新设备信息,生成唯一资产编号 维护记录:记录维修、校准、保养信息(时间、内容、执行人) 报废处理:登记报废原因、时间,更新设备状态为 "已报废" 设备查询:支持按名称、型号、状态多条件检索,显示设备当前可用情况 3. 预约与使用模块 预约管理: 预约规则:学生可预约未来 7 天内的设备 / 实验室,单次最长 4 小时(可设置) 预约流程:选择实验室→选择设备→选择时间段→提交申请(需填写实验目的) 审核机制:普通实验自动通过,高危实验(如化学实验)需教师审核 使用记录: 签到 / 签退:到达实验室后扫码签到,离开时签退,系统自动记录实际使用时长 使用登记:填写实验内容、设备运行情况(正常 / 异常),异常情况需详细描述 违规管理:迟到 15 分钟自动取消预约,多次违规限制预约权限 4. 耗材与安全管理模块 耗材管理: 耗材档案:名称、规格、数量、存放位置、
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值