1. 确认 MySQL 版本
在进行数据库复制之前,我们需要确认两个 MySQL 版本是否一致,否则可能会出现一些不可预期的问题。
可以通过以下命令查看当前 MySQL 版本:
mysql -V
如果要检查另一台机器的版本,可以通过以下命令:
mysql -u 【用户名】 -p【密码】 -h 【IP地址】 -P 【端口号】 -e "select version();"
2. 备份源数据库
2.1 使用 mysqldump
使用 mysqldump 工具可以备份整个数据库或指定的表。
备份整个数据库:
mysqldump -u 【用户名】 -p【密码】 【数据库名】 > 【备份文件名】.sql
备份指定的表:
mysqldump -u 【用户名】 -p【密码】 【数据库名】 【表名】 > 【备份文件名】.sql
备份完成后,可以使用以下命令进行验证:
head -n 10 【备份文件名】.sql
该命令将显示备份文件的前10行,以确保备份成功。
2.2 使用 LVM 快照备份
如果数据库比较大,在备份整个实例时,mysqldump 可能需要一些时间来执行。为了避免这个问题,可以使用 LVM 快照来备份数据库。
下面是一个例子:
sudo lvcreate -L 【空间大小】 -s -n 【快照名】 【数据库目录】
sudo tar cvpzf 【快照名】.tar.gz 【快照目录】
备份完成后,使用以下命令验证备份是否成功:
tar tvzf 【快照名】.tar.gz | grep 【文件名】
3. 配置目标服务器
在复制数据库之前,我们需要在目标服务器上创建一个新的空白数据库。
可以使用以下命令:
mysqladmin -u root -p【密码】 create 【数据库名】
4. 复制数据库
4.1 使用 mysqldump
使用 mysqldump 工具可以将备份文件恢复到目标系统中。
恢复整个数据库:
mysql -u 【用户名】 -p【密码】 【数据库名】 < 【备份文件名】.sql
恢复指定的表:
mysql -u 【用户名】 -p【密码】 【数据库名】 < 【备份文件名】.sql 【表名】
4.2 使用 LVM 快照
使用 LVM 快照可以将备份文件恢复到目标系统中。
需要先将备份文件传输到目标系统中。
然后,使用以下命令将备份文件解压到数据库目录中:
tar -xvpzf 【备份文件名】.tar.gz -C 【数据库目录】
最后,使用以下命令将解压后的快照恢复到数据库中:
sudo lvconvert --merge 【数据库目录】/【快照名】
sudo service mysql start
请注意,这种方法只适用于 Innodb 存储引擎,并且不建议在繁忙的服务器上使用,因为它会在恢复期间暂停数据库。
5. 配置主/从服务器
如果您想让两个 MySQL 实例自动同步,可以在一个主服务器上配置一个从服务器。
在主服务器上执行以下命令:
sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf
找到以下行:
bind-address = 127.0.0.1
并将其更改为:
#bind-address = 127.0.0.1
然后,添加以下几行:
server-id=1
log-bin=/var/log/mysql/mysql-bin.log
binlog-do-db=【数据库名】
在从服务器上执行以下命令:
sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf
将以下行注释掉:
#bind-address = 127.0.0.1
并添加以下行:
server-id=2
relay-log=/var/log/mysql/mysql-relay-bin.log
log-slave-updates=1
read-only=1
重启两个服务器的 MySQL 服务,然后登录主服务器并创建一个新的用户。
CREATE USER 'repl'@'%' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
在主服务器上使用以下命令获取二进制文件偏移量:
show master status;
在从服务器上执行以下命令:
CHANGE MASTER TO MASTER_HOST='【主服务器IP地址】',MASTER_USER='repl', MASTER_PASSWORD='password', MASTER_LOG_FILE='【二进制文件名】', MASTER_LOG_POS=【偏移量】;
最后,启动从服务器的复制程序:
start slave;
现在,两条服务器上的 MySQL 实例应该自动同步了。
总结
复制 MySQL 数据库是一项非常重要的任务,因为它可以帮助您在多个服务器之间共享数据。在进行此操作之前,请确保您已备份源数据库,并且要在目标系统上创建一个新的空白数据库。根据您的需求,可以使用不同的方法进行数据库复制,包括 mysqldump 和 LVM 快照。如果您想让两个 MySQL 实例自动同步,请在一个主服务器上配置一个从服务器。