>  기사  >  데이터 베이스  >  MySQL 양방향 백업 방법 소개(코드 포함)

MySQL 양방향 백업 방법 소개(코드 포함)

不言
不言앞으로
2019-04-11 11:52:333049검색

이 기사에서는 MySQL 양방향 백업 방법(코드 포함)을 소개합니다. 이는 특정 참고 가치가 있으므로 도움이 필요한 친구에게 도움이 되기를 바랍니다.

MySQL 양방향 백업은 "마스터-마스터 백업"이라고도 합니다. 즉, 두 MySQL 서비스가 모두 마스터이고 둘 중 하나가 다른 서비스의 슬레이브입니다.

Prepare

Server

MySQL Server Version IP 주소
masterA 5.6.41 192.168.1. 201
masterB 5.6.41 192.168 .1.202

참고:

백업 MySQL 서버 버전은 가능한 한 일관성을 유지해야 합니다. 버전마다 호환되지 않는 바이너리 로그 형식이 있을 수 있습니다.

특정 작업

주의

작업 중 양쪽 데이터의 일관성에 주의하세요! ! !

masterA 구성

my.cnf

[mysqld]
# 服务器唯一标识
server-id=1
# 二进制日志文件名
log-bin=mysql-bin

# 需要备份的数据库,多个数据库用 , 分隔
binlog-do-db=piumnl
# 需要复制的数据库,多个数据库用 , 分隔
replicate-do-db=piumnl
# 中继日志文件名
relay_log=mysqld-relay-bin
# 手动启动同步服务,避免突然宕机导致的数据日志不同步
skip-slave-start=ON
# 互为主从需要加入这一行
log-slave-updates=ON
# 禁用符号链接,防止安全风险,可不加
symbolic-links=0

# 可不加
# resolve - [Warning] Slave SQL: If a crash happens this configuration does not guarantee that the relay log info will be consistent, Error_code: 0
master-info-repository=table
relay-log-info-repository=table
relay-log-recovery=1

# 可不加
# 禁用 dns 解析,会使授权时使用的域名无效
skip-host-cache
skip-name-resolve

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

masterB 구성

my.cnf

# 不再解释各个配置项
[mysqld]
server-id=2
log-bin=mysql-bin

binlog-do-db=piumnl
replicate-do-db=piumnl
relay_log=mysql-relay-bin
skip-slave-start=ON
log-slave-updates=ON
symbolic-links=0

# resolve - [Warning] Slave SQL: If a crash happens this configuration does not guarantee that the relay log info will be consistent, Error_code: 0
master-info-repository=table
relay-log-info-repository=table
relay-log-recovery=1

skip-host-cache
skip-name-resolve

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

백업 사용자 만들기

masterA와 masterB 모두 백업 사용자를 만들어야 합니다.

create user 'rep'@'%' identified by 'rep';    # 创建一个账户
grant replication slave on *.* to 'rep'@'%';  # 授予该账户对任意数据库任意表的主从备份权限

참고:

  1. Linux에서 MySQL 쌍 root@% 用户关闭了 grant_priv권한이므로 원격 로그인인 경우 인증 실패가 발생합니다
  2. 여기의 백업 사용자 계정과 비밀번호가 일치하지 않을 수 있습니다. 작업을 단순화하려면 여기에서 동일한 계정과 비밀번호를 사용하세요

서버를 다시 시작하세요

다시 시작하세요. server

백업 활성화

masterA

masterB 상태 확인

show master status\G;
# 此处需要关注 File 和 Position 值

백업 활성화

stop slave;
# master_log_file 就是第一步操作的 File 值
# master_log_pos 就是第一步操作的 Position 值
change master to master_host=<master_hostname>, master_user=<rep_username>, master_port=<master_port>, master_password=<rep_password>, master_log_file='mysql-log.000003', master_log_pos=154;
start slave;

결과 보기

show slave status\G;
# 查看最重要的两项,两个都必须为 Yes ,有一个为 No 都要去查看错误日志文件,看看什么地方存在问题
# Slave_IO_Running: Yes
# Slave_SQL_Running: Yes

masterB

masterA의 작업을 역순으로 반복

Test

masterA와 masterB에 각각 데이터를 삽입하고 여부를 확인하세요. 다른 서버가 예상한 대로 나타납니다. Data

problem

MySQL 슬레이브가 릴레이 로그를 열지 못했습니다

다음 작업을 시도해 볼 수 있습니다.

stop slave;
flush logs;
start slave;

마스터에서 치명적인 오류 1236이 발생했습니다. 바이너리 로그에서 데이터 읽기

마스터 라이브러리에서 로그를 뽑아보니 메인 라이브러리의 mysql_bin.index 파일에 첫 번째 파일이 존재하지 않는 것으로 나타났습니다.

# 进行如下操作重置
# 如果二进制日志或中继日志有其他作用,请勿进行如下操作
reset master;
reset slave;
flush logs;

.

삽입, 업데이트 및 삭제 작업에 .

을 사용하면 백업이 수행되지 않습니다(이것은 큰 구덩이입니다)! ! ! [관련 권장사항: MySQL 튜토리얼]

위 내용은 MySQL 양방향 백업 방법 소개(코드 포함)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 segmentfault.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제