ホームページ  >  記事  >  データベース  >  MySQL 双方向バックアップ方法の紹介 (コード付き)

MySQL 双方向バックアップ方法の紹介 (コード付き)

不言
不言転載
2019-04-11 11:52:332984ブラウズ

この記事では、MySQL の双方向バックアップ方法 (コード付き) を紹介します。一定の参考価値があります。困っている友人は参考にしてください。お役に立てれば幸いです。

MySQL 双方向バックアップは、マスター-マスター バックアップとも呼ばれます。つまり、両方の MySQL サービスがマスターであり、いずれか 1 つが別のサービスのスレーブになります。

準備

サーバー

#masterA5.6.41192.168.1.201##masterB 注:
MySQLサーバー バージョン IPアドレス
5.6.41 192.168.1.202
バックアップ MySQL サーバーのバージョンは、できる限り一貫性を保つ必要があります。バイナリ ログ形式があるため、互換性がありません。

具体的な操作

注意

操作中は、両側のデータの一貫性に注意してください。 ! !

マスターA構成

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

マスターB構成

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'@'%';  # 授予该账户对任意数据库任意表的主从备份权限

注:

Linux 上の MySQL は
    root@%
  1. ユーザー に対して閉じられています。 Grant_priv権限。リモート ログインの場合、認証エラーが発生します。##ここでのバックアップ ユーザー アカウントとパスワードは一致していない可能性があります。ここでは操作を簡略化するために、同じアカウントとパスワードを使用します
  2. サーバーを再起動します
サーバーを再起動します

バックアップを有効にする

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にそれぞれデータを挿入し、予期したデータが時間内に他のサーバーに表示されます

問題

MySQL スレーブがリレー ログを開くことができませんでした

これはリレー ログに問題があるはずです。次の操作

stop slave;
flush logs;
start slave;

バイナリ ログからデータを読み取るときにマスターから致命的なエラー 1236 が発生しました

メイン ライブラリからログを取得すると、mysql_bin.index ファイルの最初のファイルがメインライブラリは存在しません。

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

.

挿入、更新、削除操作には .
を使用します。バックアップは実行されません (これは膨大な量です)ピット))! ! ! [関連する推奨事項:

MySQL チュートリアル

]

以上がMySQL 双方向バックアップ方法の紹介 (コード付き)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はsegmentfault.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。