1.環境を準備します:(1つのマスターと1つのスレーブ)
データベース | ip |
メインライブラリー | 192.168.87.133 |
図書館から | 192.168.87.134 |
1.1両方の仮想マシンはMySQL5.7とともにインストールされます。(Mysqladmin --version)
参照:
- Linux Centos7.5はMySQL5.7をインストールします
- mysql 5.7に接続できません:ホスト '192.168.87.1'はこのMysQLサーバーへの接続を許可されていません
- Mysql-ホスト 'xxx'は多くの接続エラーのためにブロックされています; 'mysqladmin flush-hosts'でブロックを解除します
1.2インストールが成功したら、2つのデータベースを作成します。
データベーススクリプト:
(1)创建数据库
#创建数据库user_db
CREATE DATABASE `user_db` CHARACTER SET 'utf8mb4' COLLATE 'utf8mb4_general_ci';
(2)在user_db中创建t_user表
DROP TABLE IF EXISTS `t_user`;
CREATE TABLE `t_user` (
`user_id` bigint(20) NOT NULL COMMENT '用户id',
`fullname` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '用户姓名',
`user_type` char(1) DEFAULT NULL COMMENT '用户类型',
PRIMARY KEY (`user_id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
2.設定
2.1メインライブラリの構成:
vim /etc/my.cnf
注:(間違った構成)
インターネット上の多くのブログは次のように構成されています。最初と同じように設定しましたが、設定が完了すると、mysqlの再起動が開始されません。
[mysqld]
#开启日志
log‐bin = mysql‐bin
#设置服务id,主从不能一致
server‐id = 1
#设置需要同步的数据库
binlog‐do‐db=user_db
#屏蔽系统库同步
binlog‐ignore‐db=mysql
binlog‐ignore‐db=information_schema
binlog‐ignore‐db=performance_schema
systemctl status mysqld.serviceおよびjournalctl -xeを使用してエラーメッセージを表示するように要求します。
そして、コマンドを使用します:mysqlログを表示するためにcat /var/log/mysqld.log、それは次のような同様のエラーを報告します:
2019-12-25T13:34:26.236167Z 0 [ERROR] unknown variable 'binlog‐do‐db=user_db'
2019-12-25T13:34:26.236192Z 0 [ERROR] Aborting
正しい構成(完全な構成):(-の代わりに_を使用)
# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/5.7/en/server-configuration-defaults.html
[mysqld]
validate_password=off
max_connect_errors=1000
#
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M
#
# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin
##################主从配置的新增部分
#开启日志文件
log_bin=mysql-bin
#设置服务id,主从不能一致
server_id=1
#设置需要同步的数据库
binlog_do_db=user_db
##屏蔽系统库同步
binlog_ignore_db=mysql
binlog_ignore_db=information_schema
binlog_ignore_db=performance_schema
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
正しく設定した後、mysqlサービスを再起動し、次のコマンドを使用します:systemctl restart mysqld
2.2スレーブ構成:(完全構成)
[mysqld]
validate_password=off
#
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M
#
# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin
#开启日志
log_bin=mysql‐bin
#设置服务id,主从不能一致
server_id=2
#设置需要同步的数据库
replicate_wild_do_table=user_db.%
#屏蔽系统库同步
replicate_wild_ignore_table=mysql.%
replicate_wild_ignore_table=information_schema.%
replicate_wild_ignore_table=performance_schema.%
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
正しく設定した後、mysqlサービスを再起動し、次のコマンドを使用します:systemctl restart mysqld
2.3 log_binが正常に開かれたかどうかを確認します(マスターライブラリとスレーブライブラリを照会できます)
3. レプリケーション用のユーザーを作成します(マスターライブラリ)
#切换至主库bin目录,登录主库,输入密码
mysql ‐uroot ‐p
#授权主备复制专用账号
grant replication slave on *.* to 'slave'@'%' identified by '123456';
#刷新权限
FLUSH PRIVILEGES;
#确认位点 记录下文件名以及位点
show master status;
スクリーンショット:(コマンドshow master statusを使用します。後でライブラリー構成から必要なものを見つけます)
4.スレーブライブラリをマスターライブラリに設定して、データを同期し、リンクを確認します。
#切换至从库bin目录,登录从库(输入密码)
mysql ‐uroot ‐p
#先停止同步
STOP SLAVE;
#修改从库指向到主库,使用上一步记录的文件名以及位点
CHANGE MASTER TO
master_host = '192.168.87.133',
master_user = 'slave',
master_password = '123456',
master_log_file = 'mysql-bin.000009',
master_log_pos = 582;
#启动同步
START SLAVE;
#查看从库状态Slave_IO_Runing和Slave_SQL_Runing都为Yes说明同步成功,如果不为Yes,请检error_log,#然后排查相关异常。
show slave status\G
######(一般不需要执行)注意: 如果之前此备库已有主库指向 需要先执行以下命令清空#########
STOP SLAVE IO_THREAD FOR CHANNEL '';
reset slave all;
PS:
master_host | マスターノード:IPアドレス |
master_user | マスターノード:レプリケーションのためにマスターノードによって作成されたアカウント |
マスターパスワード | マスターマスターノード:レプリケーションのためにマスターノードによって作成されたパスワード |
master_log_file | マスターノード:sqlコマンドで照会されたファイルフィールドの値は、マスターステータスを表示します。 |
master_log_pos | マスターマスターノード:sqlコマンドで照会されたPositionフィールドの値show master status |
完全なスクリーンショット:
ps:スレーブステータスの表示Slave_IO_RuningとSlave_SQL_Runingは両方とも[ はい]であり、同期が成功したことを示します。[はい]でない場合は、error_logを確認し、関連する例外のトラブルシューティングを行ってください。
5.テスト:
マスターライブラリ(192.168.87.133)のt_userテーブルにデータを挿入し、スレーブライブラリのt_userテーブルを更新して、データが同期されているかどうかを確認します。
5.1メインライブラリ:t_user
5.2スレーブ:t_user (テーブルの更新)