通过实现MySQL数据库镜像(复制),可以远程实时备份MySQL数据库。数据库镜像,需要两台服务器(或者用两台VPS主机)。一台为主服务器,另一台为从服务器,所有主服务器上数据库的变化,都实时镜像到从服务器上。
- 在主服务器上,创建用于数据库镜像的数据库用户,从服务器用这个帐号连接主服务器。
该数据库用户只要有 REPLICATION SLAVE 权限,由于该用户名、密码将明文保存在 master.info 文件中,因此建议创建单独的镜像用户。例如:创建一个镜像用户 repl 的命令:
mysql> CREATE USER 'repl'@'localhost' IDENTIFIED BY 'password'; mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'localhost';
# RENAME USER old_user TO new_user RENAME USER 'jeffrey'@'localhost' TO 'jeff'@'localhost';
- 设置主服务器
要将源配置为使用基于二进制日志文件位置的复制,必须确保启用二进制日志记录,并建立唯一的服务器 ID。复制拓扑中的每个服务器都必须配置一个唯一的服务器 ID,可以使用server_id 系统变量指定该 ID 。此服务器 ID 用于标识复制拓扑中的各个服务器,并且必须是 1 和 (232)-1 之间的正整数。server_id 在 MySQL 8.0 中默认值为 1。
首先,用如下语句查询本数据的 server_id
SELECT @@server_id;
当然,如果想更改当前服务器的 server_id,可用如下语句
SET GLOBAL server_id = 2;
- 使用 mysqldump 导出备份源数据库
# 先锁定数据库 mysql> FLUSH TABLES WITH READ LOCK; # 退出数据,执行如下语句 shell> mysqldump -u root -p sourceDatabase --lock-all-tables > sourceDatabase.sql # 备份完毕,再登陆数据库解锁 mysql> UNLOCK TABLES;
- 使用 mysql 还原备份数据到新的数据库
shell> mysql -u root -p newDatabase < sourceDatabase.sql
https://dev.mysql.com/doc/refman/8.0/en/replication-howto-repuser.html