以下是Ubuntu下MySQL数据迁移的常见步骤及方法,可根据场景选择:
1. 备份源数据库
使用mysqldump导出数据(含结构),添加--single-transaction确保一致性:
mysqldump -u [用户名] -p[密码] --databases [源库名] > backup.sql
2. 传输备份文件
通过scp或rsync将backup.sql复制到目标服务器:
scp backup.sql user@[目标服务器IP]:/path/to/destination/
3. 恢复到目标数据库
在目标服务器执行导入命令:
mysql -u [用户名] -p[密码] [目标库名] < /path/to/backup.sql
4. 验证数据
登录目标数据库,检查表结构和数据是否完整:
USE [目标库名]; SHOW TABLES; SELECT COUNT(*) FROM [表名];
1. 停止MySQL服务
sudo systemctl stop mysql
2. 迁移数据目录
/var/lib/mysql数据目录复制到新位置(如/mnt/mysql),保留权限:sudo rsync -av /var/lib/mysql/ /mnt/mysql/
sudo chown -R mysql:mysql /mnt/mysql
3. 修改配置文件
编辑/etc/mysql/mysql.conf.d/mysqld.cnf,更新datadir路径:
datadir = /mnt/mysql
4. 调整AppArmor(Ubuntu特有)
在/etc/apparmor.d/usr.sbin.mysqld中添加新路径权限,重载配置:
sudo apparmor_parser -r /etc/apparmor.d/usr.sbin.mysqld
5. 启动服务并验证
sudo systemctl start mysql
sudo mysql -e "SHOW VARIABLES LIKE 'datadir';" # 确认路径正确
1. 主从复制配置
-- 在my.cnf中添加
[mysqld]
server-id = 1
log-bin = /var/log/mysql/mysql-bin.log
binlog-do-db=[库名]
CHANGE MASTER TO
MASTER_HOST='主库IP',
MASTER_USER='replicator',
MASTER_PASSWORD='密码',
MASTER_LOG_FILE='binlog文件名',
MASTER_LOG_POS=位置;
START SLAVE;
根据数据规模和业务需求选择合适方案,小型库优先用mysqldump,大型库可考虑xtrabackup或主从复制。