基础环境:
主库 | 从库 | |
服务器 IP 地址 | 192.168.10.11 | 192.168.10.12 |
版本 | 5.7.24 | 5.7.24 |
已存在的数据库 | mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | lijiamandb | | mysql | | performance_schema | | sys | | testdb | +--------------------+ | mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | +--------------------+ |
(一)主数据库复制相关参数配置(主)
如果要使用复制功能, 则必须开启二进制日志, 如果要开启二进制日志, 需要设置 server-id 参数, 启动二进制日志需要重启数据库实例. 最少的参数配置如下:
- [mysqld]
- log-bin=MySQL-bin
- server-id=1
但在实际使用中, 还需配置其它参数, 用于优化配置:
如果未设置 server_id(或将其显式设置为其默认值 0), 则主服务器将拒绝从属服务器的任何连接;
为了在 InnoDB 事务复制设置中获得最大的持久性和一致性, 应在 my.cnf 文件中使用 innodb_flush_log_at_trx_commit=1 和 sync_binlog=1;
确保未在复制主机上启用系统变量 skip_networking. 如果已禁用网络连接, 则从服务器将无法与主服务器通信, 复制将失败.
因此, 我的 my.cnf 配置如下:
- [mysqld]
- # 复制相关参数配置
- server_id = 1
- binlog_format=ROW
- log_bin=/MySQL/binlog/master-bin
- sync_binlog=1
- expire_logs_days=1
- max_binlog_size=1G
- sync_binlog=1
- innodb_flush_log_at_trx_commit=1
(二)创建用于复制的用户(主)
每个从服务器都需要使用 MySQL 的用户和密码连接到主服务器上, 因此需要在主服务器上创建 MySQL 的用户, 用于进行复制操作. 可以为每个从库单独创建一个账号, 也可以使用同一个账号. 账号需具有 "replication slave" 权限.
MySQL> grant replication slave on *.* to 'rep'@'%' identified by '123';
(三)初始化从库数据(从)
初始化的方法有很多, 可以使用 mysqldump, 也可以使用 xtrabackup, 其他方法见. 这里以最常用的 mysqldump 进行操作.
(3.1)首先对主库进行备份
- [root@slavedb ~]# mysqldump -uroot -p123456 -h 192.168.10.11 --single-transaction --all-databases --master-data=2> master.sql
- mysqldump: [Warning] Using a password on the command line interface can be insecure.
- [root@slavedb ~]# ls -l
- total 1058724
- -rw-r--r-- 1 root root 1084126048 Feb 15 19:30 master.sql
注意:--master-data=2 不可缺少, 该参数会将备份到的位置以注释的形式保存在备份集文件中.
(3.2)在备库上还原
- [root@slavedb ~]# MySQL -uroot -p123456 <master.sql
- MySQL: [Warning] Using a password on the command line interface can be insecure.
(3.3)确认备库还原到的位置
- [root@slavedb ~]# cat master.sql |grep "CHANGE MASTER"|Less
- -- CHANGE MASTER TO MASTER_LOG_FILE='master-bin.000021', MASTER_LOG_POS=610;
(四)从数据库复制相关参数配置(从)
如果尚未设置从服务器 ID, 或者当前值与您为主服务器选择的值冲突, 请关闭从服务器并编辑 [mysqld] 配置文件的 部分以指定唯一的服务器 ID. 例如:
- [mysqld]
- server_id = 2
注意: 不必在从属服务器上启用二进制日志记录即可设置复制. 但是, 如果在从属服务器上启用二进制日志记录, 则可以使用从属服务器的二进制日志进行数据备份和崩溃恢复, 也可以将从属服务器用作更复杂的复制拓扑的一部分(级联).
(五)将从数据库添加到复制环境(从)
在从服务器设置主服务器配置信息:
- MySQL> change master to
- -> master_host='192.168.10.11',
- -> master_port=3306,
- -> master_user='rep',
- -> master_password='123',
- -> master_log_file='master-bin.000021',
- -> master_log_pos=610;
启动从库复制相关进程:
- MySQL> start slave;
- Query OK, 0 rows affected (0.01 sec)
(六)确认复制状态
在从库执行 "show slave status", 如果 Slave_IO_Running 和 Slave_SQL_Running 都是 "YES", 说明复制正常.
- MySQL> show slave status \G
- *************************** 1. row ***************************
- Slave_IO_State: Waiting for master to send event
- Master_Host: 192.168.10.11
- Master_User: rep
- Master_Port: 3306
- Connect_Retry: 60
- Master_Log_File: master-bin.000022
- Read_Master_Log_Pos: 1192320
- Relay_Log_File: slavedb-relay-bin.000005
- Relay_Log_Pos: 1192535
- Relay_Master_Log_File: master-bin.000022
- Slave_IO_Running: Yes
- Slave_SQL_Running: Yes
- Replicate_Do_DB:
- Replicate_Ignore_DB:
- Replicate_Do_Table:
- Replicate_Ignore_Table:
- Replicate_Wild_Do_Table:
- Replicate_Wild_Ignore_Table:
- Last_Errno: 0
- Last_Error:
- Skip_Counter: 0
- Exec_Master_Log_Pos: 1192320
- Relay_Log_Space: 1192911
- Until_Condition: None
- Until_Log_File:
- Until_Log_Pos: 0
- Master_SSL_Allowed: No
- Master_SSL_CA_File:
- Master_SSL_CA_Path:
- Master_SSL_Cert:
- Master_SSL_Cipher:
- Master_SSL_Key:
- Seconds_Behind_Master: 0
- Master_SSL_Verify_Server_Cert: No
- Last_IO_Errno: 0
- Last_IO_Error:
- Last_SQL_Errno: 0
- Last_SQL_Error:
- Replicate_Ignore_Server_Ids:
- Master_Server_Id: 1
- Master_UUID: caa64a22-481a-11ea-b0f1-000c29fb6200
- Master_Info_File: /MySQL/data/master.info
- SQL_Delay: 0
- SQL_Remaining_Delay: NULL
- Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
- Master_Retry_Count: 86400
- Master_Bind:
- Last_IO_Error_Timestamp:
- Last_SQL_Error_Timestamp:
- Master_SSL_Crl:
- Master_SSL_Crlpath:
- Retrieved_Gtid_Set:
- Executed_Gtid_Set:
- Auto_Position: 0
- Replicate_Rewrite_DB:
- Channel_Name:
- Master_TLS_Version:
- 1 row in set (0.00 sec)
[完]
附录:
MySQL 复制 (replication) 文档集合: 1. 复制概述 < br ztid="131" ow="0" oh="0">2. 基于二进制日志文件位置 (binlog) 配置复制
|
来源: https://www.cnblogs.com/lijiaman/p/12313702.html