我的从库是完全复制了主的数据库,和配置文件:
这个是我从机的my.conf文件,完全复制自主库:[mysqld]
# 配置sql_mode
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,
NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
# 设置表名不区分大小写,linux默认是区分的,windows默认不区分
lower_case_table_names=1
# 允许最大连接数
max_connections=2000
# 允许连接失败的次数
max_connect_errors=5
# 服务端使用的字符集默认为UTF8MB4
character-set-server=UTF8MB4
# 默认使用“mysql_native_password”插件认证
default_authentication_plugin=mysql_native_password
# 禁用DNS解析
skip-name-resolve
# 开启远程访问
skip-grant-tables
# 设置数据库时区
default-time_zone = '+8:00'gtid-mode = ON
enforce-gtid-consistency = ON###以下为主从配置
server-id=2114
log-bin=master_114[client]
# 设置mysql客户端默认字符集
default-character-set=UTF8MB4
[mysql]
default-character-set=UTF8MB4
配置主从时遇到的报错有二处:
导入主库数据库时:
mysql -u root -p < data_bak2.sql Enter password: ERROR 1794 (HY000) at line 24: Slave is not configured or failed to initialize properly. You must at least set --server-id to enable either a master or a slave. Additional error messages can be found in the MySQL error log.
经检查原因是,从库必须删掉
log-bin=master_114
这个应该只有主库才需要配置。
导入文件后,启动主从,然后查看状态:
SHOW SLAVE STATUS;
发现报错:
Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work.
原因时数据库的uuid相同,需要更改以下,我随机修改了/mysql/data/auto.conf文件内的UUID的几个数字后解决。
以下时几个关键步骤:
主机锁表:
FLUSH TABLES WITH READ LOCK;
查看锁表后的LOGBIN会话位置,并记录下来:
SHOW MASTER STATUS;
锁表后导出数据库:
mysqldump -u root -p --all-databases --master-data > data_dump.sql
导出后记得解除锁表:
UNLOCK TABLES;
从机导入主机的锁表备份数据库:
mysql -u root -p < data_dump.sql
从机配置主机同步IP和密码:
CHANGE MASTER TO
MASTER_HOST='master_host_ip',
MASTER_USER='repl',
MASTER_PASSWORD='your_password',
MASTER_LOG_FILE='mysql-bin.000001', -- 从主服务器的 SHOW MASTER STATUS 获得
MASTER_LOG_POS= 123; -- 从主服务器的 SHOW MASTER STATUS 获得
配置好后启动slave
START SLAVE;
SHOW SLAVE STATUS;