目次
1.マスタースレーブレプリケーション
マスタースレーブレプリケーションの原則は、マスターデータベースが追加、削除、変更、およびチェック操作をバイナリファイルに書き込み、データベースからファイルを読み取り、データをコピーしてマスタースレーブデータベースの一貫性を維持することです。
マスタースレーブレプリケーションの利点は次のとおりです。
1.高可用性:メインライブラリが異常な場合は、ライブラリからすばやく切り替えてアプリケーションを復元します
2.負荷分散:読み取りと書き込みの分離。メインライブラリから書き込み、ライブラリから読み取ります。ただし、MaxScaleなどの他のプラグインの実装が必要です
3.バックアップデータ:スレーブデータベースからのデータはマスターデータベースと一致しています。これはバックアップ方法と同等です。
2.役割分担
IPアドレス | 役割 |
192.168.44.66 | 主人 |
182.168.44.88 | 奴隷 |
3.マスターとスレーブを構成します
MySQL8.0データベースのインストールについては、https: //blog.csdn.net/ct_666/article/details/111248343を参照し、ここから直接構成を開始してください。
前提条件:
# 关闭主从数据库服务器的防火墙
systemctl stop firewalld && systemctl disable firewalld
# 两台机器网络互通
メインライブラリの構成:
# 编辑配置文件
vi /etc/my.cnf
# 在文件结尾添加以下内容:
# 主服务器唯一ID
server-id=1
# 启用二进制日志
log-bin=mysql-bin
# 设置不要复制的数据库(可设置多个),不设置则默认同步所有库
binlog-ignore-db=sys
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
# 设置需要复制的数据库(可设置多个),不设置则默认同步所有库
binlog-do-db=test
# 设置logbin格式
binlog_format=STATEMENT
ライブラリからの構成:
# 编辑配置文件
vi /etc/my.cnf
# 在文件结尾添加以下内容:
# 从服务器唯一ID
server-id=2
# 启用中继日志
relay-log=mysql-relay
マスターデータベースとスレーブデータベースを再起動して、構成を有効にします
systemctl restart mysqld
メインライブラリにログインして、レプリケーションに使用するユーザースレーブを作成し、ファイルの値と位置を記録します
# 登录主库
mysql -uroot -p
或者
mysql -uroot -p -h127.0.0.1
# 在主库创建密码为Admin#2020的用户slave
mysql> create user 'slave'@'%' identified with mysql_native_password by 'Admin#2020';
Query OK, 0 rows affected (0.41 sec)
# 授权
mysql> grant replication slave on *.* to 'slave'@'%';
Query OK, 0 rows affected (0.00 sec)
# 刷新权限
mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)
# 查看master状态,并记录file和position的值
mysql> show master status;
+------------------+----------+--------------+-------------------------------------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+-------------------------------------------------+-------------------+
| mysql-bin.000001 | 156 | test | sys,mysql,information_schema,performance_schema | |
+------------------+----------+--------------+-------------------------------------------------+-------------------+
1 row in set (0.00 sec)
# 退出主库以防误操作改变file和position的值
quit;
ログインしてライブラリから設定します。
# 登录从库
mysql -uroot -p
或者
mysql -uroot -p -h127.0.0.1
# 设置从库向主库同步数据,参数说明:
# master_host的值是你的主库IP
# master_port的值是你的主库端口
# master_user就是创建的slave用户
# master_password就是创建的slave用户的密码
# master_log_file的值就是前面记录的file的值
# master_log_pos的值就是前面记录的position的值
mysql> change master to master_host='192.168.44.66',master_port=3306,master_user='slave',master_password='Admin#2020',master_log_file='mysql-bin.000001',master_log_pos=156;
Query OK, 0 rows affected, 2 warnings (0.19 sec)
# 开始同步
mysql> start slave;
Query OK, 0 rows affected, 1 warning (0.01 sec)
# 查看slave同步状态
# Slave_IO_Running: Yes,Slave_SQL_Running: Yes,两个yes则同步成功,否则查看相应的报错
mysql> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.44.66
Master_User: slave
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000001
Read_Master_Log_Pos: 156
Relay_Log_File: mysql-relay.000001
Relay_Log_Pos: 324
Relay_Master_Log_File: mysql-bin.000001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
マスタースレーブ同期のテスト:
# 主数据库创建数据库test
create database test;
# 从数据库查看
show databases;
# 主数据库创建表
use test;
create table user(id int, name varchar(20));
# 插入数据
insert into user values(1, '张三');
# 从数据库查看
use test;
select * from user;
同期エラーが発生した場合は、同期を停止し、リセット後に同期を再開します。
stop slave;
reset slave;
start slave;
4.コピーエラーをスキップします
mysqlマスタースレーブレプリケーションでは、多くの場合、エラーが発生し、スレーブ側でレプリケーションが中断されます。現時点では、同期を続行するには、通常、エラーをスキップして手動で介入する必要があります。エラーをスキップするには、次の3つの方法があります。
①指定された数のトランザクションをスキップします。
mysql>stop slave;
mysql>SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1 #跳过一个事务
mysql>start slave;
②スレーブデータベースmysqlの設定ファイルを変更するか、指定されたタイプのエラーをスキップするか、slave_skip_errorsパラメータを使用してすべてのエラーをスキップします。
# 编辑配置文件
vi /etc/my.cnf
# 文件末尾添加,三选一
# 跳过1062,1053,1146类型的错误
slave-skip-errors=1062,1053,1146
# 跳过所有错误
slave-skip-errors=all
# MySQL8.0可以添加参数ddl_exist_errors跳过一系列的error code,包括(1007,1008,1050,1051,1054,1060,1061,1068,1094,1146)
slave-skip-errors=ddl_exist_errors
# 重启MySQL
systemctl restart mysqld