下面是详细的步骤和示例说明,具体流程如下:
环境准备
在进行 MySQL 主从复制之前,需要做一些准备:
- 确保主库和从库都安装了 MySQL 数据库,并且版本一致
- 确保主库和从库都能够相互访问,即主库能够访问从库,从库能够访问主库
- 确保主库和从库都有相同的字符集和排序规则
主库配置
- 在主库上创建一个账号,并为该账号赋予 REPLICATION SLAVE 的权限
CREATE USER 'repl'@'%' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
- 修改主库的配置文件 my.cnf,在 [mysqld] 段中添加以下内容:
log-bin=mysql-bin # 开启二进制日志
server-id=1 # 服务器唯一标识,主从必须不同
- 重启 MySQL 服务以使更改生效
从库配置
- 修改从库的配置文件 my.cnf,在 [mysqld] 段中添加以下内容:
server-id=2 # 服务器唯一标识,主从必须不同
- 在从库上执行以下命令,设置主库的地址、账号和密码,并开始复制过程
CHANGE MASTER TO
MASTER_HOST='<主库IP或主机名>',
MASTER_USER='repl',
MASTER_PASSWORD='password',
MASTER_LOG_FILE='<主库上当前的二进制日志文件>',
MASTER_LOG_POS=<主库上当前的二进制日志偏移量>;
START SLAVE;
其中,<主库IP或主机名>、<主库上当前的二进制日志文件> 和 <主库上当前的二进制日志偏移量> 需要从主库上获取,可以通过以下命令获取:
SHOW MASTER STATUS;
示例说明
示例一:主库和从库在同一台机器上
- 在本地主机上创建两个 MySQL 实例,一个作为主库,一个作为从库
$ mysql_install_db --datadir=./mysql1/data/
$ mysql_install_db --datadir=./mysql2/data/
$ mysqld_safe --defaults-file=./my.cnf --datadir=./mysql1/data/ &
$ mysqld_safe --defaults-file=./my.cnf --datadir=./mysql2/data/ &
其中,my.cnf 的内容为:
[mysqld]
log-bin=mysql-bin
server-id=1
- 在主库上创建账号和数据库,并往数据库中插入一些数据
CREATE DATABASE test;
CREATE TABLE test.t (id INT);
INSERT INTO test.t VALUES (1), (2), (3);
- 在从库上进行主从复制的配置,并开始复制
CHANGE MASTER TO
MASTER_HOST='127.0.0.1',
MASTER_USER='repl',
MASTER_PASSWORD='password',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=154;
START SLAVE;
其中,MASTER_LOG_FILE 和 MASTER_LOG_POS 的值可以通过 SHOW MASTER STATUS 命令获取。
- 在主库上修改数据
INSERT INTO test.t VALUES (4);
- 在从库上查看数据是否同步
SELECT * FROM test.t;
可以看到,从库中的数据已经更新为 1、2、3、4。
示例二:主库和从库在不同的机器上
-
在主机 A 上创建 MySQL 实例作为主库,并在主机 B 上创建 MySQL 实例作为从库
-
在主库上创建账号和数据库,并插入一些数据
CREATE DATABASE test;
CREATE TABLE test.t (id INT);
INSERT INTO test.t VALUES (1), (2), (3);
- 修改主库的 my.cnf 文件,添加以下内容:
bind-address=<主机A的IP地址>
- 在从库上进行主从复制的配置,并开始复制
CHANGE MASTER TO
MASTER_HOST='<主机A的IP地址>',
MASTER_USER='repl',
MASTER_PASSWORD='password',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=154;
START SLAVE;
其中,MASTER_LOG_FILE 和 MASTER_LOG_POS 的值可以通过 SHOW MASTER STATUS 命令获取。
- 在主库上修改数据
INSERT INTO test.t VALUES (4);
- 在从库上查看数据是否同步
SELECT * FROM test.t;
可以看到,从库中的数据已经更新为 1、2、3、4。
注意:在从库上设置 MASTER_HOST 的时候,要使用主库机器的 IP 地址。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:linux系统下实现mysql热备份详细步骤(mysql主从复制) - Python技术站