美文网首页
mysql-主从复制

mysql-主从复制

作者: bug_ling | 来源:发表于2020-11-24 09:32 被阅读0次

三步骤:

1、master将改变记录到二进制日志。这些记录过程叫做二进制日志事件,binary log events

2、slave将master的binary log events拷贝到它的中继日志(relay log)

3、slave重做中继日志中的事件,将改变应用到自己的数据库中。mysql复制是异步的且串行化的

master和slave的mysql版本最好一致

原理:主服务器建立二进制日志,每产生语句或磁盘变化,写进日志;授权复制账号

从服务器建立中继日志;利用复制账号来监听主服务器的日志

实操步骤:

配置binlog日志文件和中继日志文件

主机

1、主服务器ID必须唯一:server_id = 1

2、必须启用二进制日志文件:

    log-bin=mysql-bin

    # 指定日志格式

    binlog-format=mixed # statement(语句)、 row(行)、 mixed(语句和行的混合)

3、启用错误日志

    log-error=/var/mysql/mysql-error.log

4、根目录

    basedir=指mysql的安装位置

    tmpdir= # 临时目录

    datadir= # 数据存储目录

read-only=0

binlog-format=mixed/row/

binlog-ignore-db=mysql

从机:

从服务器唯一ID:server-id=2

启用二进制日志:relay-log=mysql-relay # 开启中继日志

建立账户并授权slave

主机:

#grant replication slave on *.* to 'zhansan'@'zhuji' identified by 'new-password';

grant replication client,replication slave on *.* to 'repl'@'192.169.%.%' identified by 'new-password';

flush privileges;

start master;

show master status; # 取得File:mysqlbin.00001文件和Postion:331位置的值

从机:

change master to 

master_host='ip-address'

master_user='zhansan'

master_password='new-password'

master_log_file='mysqlbin.00001',master_log_pos=331;

start slave;

show status slave; # 查看slave_io_running和slave_sql_running是否开启,如果开启成功就是yes

reset slave; # 重置slave的状态

stop slave; # 停止slave

注意show slave status查看file和position位置的重要性

# 主主复制会出现主键冲突,该如何解决

set session auto_increment=2; # 每步增长2

set session auto_increment=1; # 从1开始增长

set global auto_increment_increment=2;

set global auto_increment_increment=1;

## log-bin二进制日志

日志配置:

开启:log-bin=mysql-bin

设置binlog的格式:binlog-format=mixed # statement,row,mixed

设置log能存储的最大值:max_binlog_size=104857200 # 10M

设置值保留几天的binlog日志:expire_logs_days=7

设置日志只记录指定库的更新:binlog-do-db=db_name

设置日志不记录指定库的更新:binlog-ignore-db=db_name

设置写缓冲多少次,刷一次磁盘,默认为0:sync_binlog=0

查看日志状态和事件:

查看日志是否开启:show variables like '%log_bin%'

查看binlog列表:show binary logs

查看最新的binlog:show master status

查看binlog执行的事件:show binlog events in 'mysql-bin.000001'

查看binlog日志的格式:show global variables like '%binlog-format%';

查看binlog的二进制文件:mysqlbinlog mysql-bin.000001 | more

### 通过mysqlbinlog命令手动恢复数据:

    1、show binary logs;

    2、show binlog events in 'mysql-bin.0000001'; # 找到pos的开始和结束位置

    3、mysqlbinlog --no-defaults --database=dblog--base64-output=decode-rows -vv --start-position=1359 --stop-position=5484  mysql-bin.000001 > backup.sql # 将1359 - 5484位点的数据恢复成自定义的sql文件

    -v:自动生成带注释的SQL语句

    -v -v|-vv:生成列的描述信息,会生成字段的类型、长度、是否为null等

    --base64-output=decode-rows:日志为rows类型时的解码操作

binlog-format的类型时row的情况下遇到的问题:

(1)、binlog出现读不懂的编码,可用--base64-output=decode-rows来解决

(2)、解码后的sql非原生sql,那么如何解决尼?

    show variables like 'binlog_rows_query_log_events';

    set binlog_rows_query_log_events=1;

    flush logs;

    参考链接:https://www.cnblogs.com/kerrycode/p/9315949.html

(3)、解码后发现insert、update、delete等操作被注释掉了?

    暂未找到解决方法,

    但是网上有用binlog2sql来解析二进制日志文件

    参考连接:https://www.cnblogs.com/rickiyang/p/13841811.html

相关文章

  • mysql(十二)

    MySQL-主从复制 主从复制原理 主从复制的前提 1)两台或两台以上的数据库实例2)主库要开启二进制日志3)主库...

  • Mysql-主从复制

    Mysql主从复制的基本原理 核心:Slave从Master读取binlog进行数据同步Mysql主从复制过程: ...

  • mysql-主从复制

    三步骤: 1、master将改变记录到二进制日志。这些记录过程叫做二进制日志事件,binary log event...

  • Mysql-主从复制

    主从复制 by shihang.mai 主从数据间延迟解决方案 业务的持久化层的实现采用分库架构,mysql服务可...

  • mysql-主从复制

    准备工作 现在我有两台mysql服务,一台在windows,一台在liunx虚拟机。 复制的基本原理 slave会...

  • MySQL-主从复制基础

    0.企业高可用性标准 *** 0.1 全年无故障率(非计划内故障停机) 0.2 高可用架构方案 1. 主从复制简介...

  • MySQL-主从复制高级进阶

    半同步复制(了解) 3 解决主从数据一致性问题 半同步复制工作原理的变化 配置半同步复制 过滤复制 说明 主库: ...

  • MySQL-主从复制&读写分离

    零、本文纲要 一、MySQL主从复制 主从复制 主从复制过程 配置主从复制 二、MySQL读写分离 读写分离 Sh...

  • MySQL-数据库主从复制

    0、企业高可用性标准(全年无故障率) 0.1 企业级高可用方案 1、主从复制简介 基于二进制日志复制的主库的修改...

  • 08 MySQL-初识MySQL-事务-隔离鉴别

    如果没有特别说明,都是默认autocommit=1 根据我的第三篇03 MySQL-初识MySQL-事务隔离级别提...

网友评论

      本文标题:mysql-主从复制

      本文链接:https://www.haomeiwen.com/subject/dcediktx.html