mysql8.4.3配置主从复制
先把数据库导出sql,导入从库,列表库必须存在,并且初始值一样,然后就可以按照下面的日志同步了
1、主库
# 主库复制必备设置
server-id=1 # 主库ID必须为1
log-bin=mysql-bin # 启用二进制日志
#binlog-do-db=* # 可选:指定需要复制的数据库,*表示所有库
# 设置不要复制的数据库(可设置多个)
binlog-ignore-db=sys
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
binlog_format=ROW # 推荐使用ROW格式
log-slave-updates=1 # 允许从库将复制事件写入自己的binlog
expire-logs-days=90 # 二进制日志保留天数
2、从库
server-id=2
log-bin=mysql-bin
relay-log=mysql-relay-bin
log-slave-updates=1
read-only=1
# 完全只读模式,仅复制线程可写,
# super_read_only=1
binlog_format=ROW
# 跳过"Can't find record"错误,这个开启,就是操作主库,从库没有的数据,报错,导致从库停止,开启后,不会停止,出现这一种情况,就是全量同步没做好,全量好,不会有这一种问题,如果需要就开启,操作到从客户没有的数据不报错
# slave_skip_errors = 1032
# 跳过 "Operation DROP USER failed" 错误,跳过创建用户错误,删除了原同步账号,在创建
slave_skip_errors = 1396
3、主库执行命令
--SHOW BINARY LOGS;
SHOW BINARY LOG STATUS
需要这两个值
主库创建复制账号,密码
CREATE USER 'repl_user'@'%' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'%';
FLUSH PRIVILEGES;
4、从库执行命令
-- 步骤1: 停止复制IO线程
STOP REPLICA IO_THREAD;
-- 停止所有
STOP REPLICA;-- SOURCE_LOG_FILE='主库SHOW BINARY LOG STATUS输出的File值',
-- SOURCE_LOG_POS=主库SHOW BINARY LOG STATUS输出的Position值;
CHANGE REPLICATION SOURCE TOSOURCE_HOST='IP地址',SOURCE_USER='repl_user',SOURCE_PASSWORD='password',SOURCE_PORT=40010,SOURCE_LOG_FILE='binlog.000015',SOURCE_LOG_POS=1351,SOURCE_AUTO_POSITION=0;-- 步骤3: 启动复制IO线程
START REPLICA IO_THREAD;
#启动复制,在从服务器(node节点上面)
START replica;-- 步骤4: 验证复制状态
SHOW REPLICA STATUS;
完整配置
主
[client]
default-character-set=utf8mb4[mysql]
default-character-set=utf8mb4
no-auto-rehash[mysqld]
port=3306
datadir = /usr/local/mysql/data
init_connect='SET NAMES utf8mb4'
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
max_connections=2000
default-storage-engine=INNODB
innodb_lock_wait_timeout = 120innodb_use_native_aio = 0default_storage_engine = InnoDB
performance_schema_max_table_instances = 400
table_definition_cache = 400
skip-external-locking
key_buffer_size = 30M
max_allowed_packet = 100M
table_open_cache = 4096
sort_buffer_size = 20M
net_buffer_length = 40K
read_buffer_size = 20M
read_rnd_buffer_size = 556K
myisam_sort_buffer_size = 40M
thread_cache_size = 512
tmp_table_size = 50M
explicit_defaults_for_timestamp = true
#skip-name-resolve
open_files_limit = 65535
binlog_expire_logs_seconds = 600000
slow_query_log=1
long_query_time=3
#log_queries_not_using_indexes=on
early-plugin-load = ""
innodb_data_file_path = ibdata1:10M:autoextend
innodb_buffer_pool_size = 200M
innodb_log_file_size = 20M
innodb_log_buffer_size = 20M
innodb_flush_log_at_trx_commit = 2
innodb_max_dirty_pages_pct = 90
innodb_read_io_threads = 56
innodb_write_io_threads = 56sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION[mysqldump]
quick
max_allowed_packet = 100M[myisamchk]
key_buffer_size = 100M
sort_buffer_size = 16M
read_buffer = 2M
write_buffer = 2M[mysqlhotcopy]
interactive-timeout# 主库复制必备设置
server-id=1 # 主库ID必须为1
log-bin=mysql-bin # 启用二进制日志
#binlog-do-db=* # 可选:指定需要复制的数据库,*表示所有库
# 设置不要复制的数据库(可设置多个)
binlog-ignore-db=sys
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
binlog_format=ROW # 推荐使用ROW格式
log-slave-updates=1 # 允许从库将复制事件写入自己的binlog
expire-logs-days=7 # 二进制日志保留天数
从
[mysqld]
port=33306
basedir=E:\mysql8.4.3\mysql-8.4.3-winx64
datadir=E:\mysql8.4.3\mysql-8.4.3-winx64\data
max_connections=2000server-id=2
log-bin=mysql-bin
relay-log=mysql-relay-bin
log-slave-updates=1
read-only=1
# 完全只读模式,仅复制线程可写
# super_read_only=1
binlog_format=ROW
# 跳过"Can't find record"错误,这个开启,就是操作主库,从库没有的数据,报错,导致从库停止,开启后,不会停止,出现这一种情况,就是全量同步没做好,全量好,不会有这一种问题,如果需要就开启,操作到从客户没有的数据不报错
# slave_skip_errors = 1032
# 跳过 "Operation DROP USER failed" 错误,跳过创建用户错误,删除了原同步账号,在创建
slave_skip_errors = 1396