CentOS环境下MySQL数据迁移实用技巧
迁移前需完成以下关键步骤,避免数据丢失或配置错误:
mysqldump工具备份源数据库,确保数据完整性。例如,备份单个数据库可使用mysqldump -u [用户名] -p[密码] [数据库名] > backup.sql;备份所有数据库则添加--all-databases选项。建议对备份文件进行压缩(如mysqldump ... | gzip > backup.sql.gz)以节省传输空间。mysql --version命令查看版本信息。perl-module-install.noarch、libaio、libaio-devel),避免安装失败。逻辑备份通过SQL语句导出数据,适合结构化数据迁移,步骤如下:
mysqldump生成SQL文件(如mysqldump -u root -p mydb > mydb_backup.sql)。scp(加密传输)或rsync(增量传输)将SQL文件传输到目标服务器(如scp mydb_backup.sql user@target_server:/tmp)。mysql -u root -p -e "CREATE DATABASE mydb;"),然后导入备份文件(mysql -u root -p mydb < /tmp/mydb_backup.sql)。--single-transaction选项(InnoDB表)避免锁表,或使用--compress选项减少传输数据量。物理备份直接复制数据文件,速度快且支持增量备份,适合大型数据库,常用Percona XtraBackup工具:
percona-xtrabackup-2.4),编译安装(cmake ... && make && sudo make install)。innobackupex命令备份(innobackupex --user=mysql --password=123456 /path/to/backup),完成后会生成backup-my.cnf(备份配置)和xtrabackup_logfile(日志)文件。innobackupex --apply-log /path/to/backup,将备份文件转换为可恢复状态。/etc/my.cnf)中的datadir(如指向/new_data/mysql),再执行innobackupex --copy-back /path/to/backup恢复数据。chown -R mysql:mysql /new_data/mysql),避免MySQL无法访问文件。若需将MySQL数据从默认路径(/var/lib/mysql)迁移至新路径(如/data/mysql),需修改数据目录配置:
systemctl stop mysqld确保数据一致性,禁止使用kill命令强制停止。mkdir -p /data/mysql),复制旧数据文件(rsync -av /var/lib/mysql/* /data/mysql/),保留文件权限和属性。/etc/my.cnf,在[mysqld]部分添加datadir=/data/mysql,保存后退出。semanage fcontext -a -t mysqld_db_t "/data/mysql(/.*)?"),否则MySQL无法访问新目录。systemctl restart mysqld),通过SHOW VARIABLES LIKE 'datadir';查询数据目录是否生效,登录MySQL检查数据完整性。主从复制可实现源数据库与目标数据库的实时数据同步,适合需要高可用的场景:
my.cnf(添加server-id=1、log_bin=/var/log/mysql/mysql-bin.log、binlog_do_db=[数据库名]),重启MySQL;创建复制用户(CREATE USER 'repl'@'%' IDENTIFIED BY '123456'; GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%'; FLUSH PRIVILEGES;);执行SHOW MASTER STATUS;记录二进制日志文件名(如mysql-bin.000001)和位置(如123)。my.cnf(添加server-id=2、relay_log=/var/log/mysql/mysql-relay-bin.log、log_bin=/var/log/mysql/mysql-bin.log、replicate_do_db=[数据库名]),重启MySQL;执行CHANGE MASTER TO MASTER_HOST='主服务器IP', MASTER_USER='repl', MASTER_PASSWORD='123456', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=123;;启动复制(START SLAVE;)。SHOW SLAVE STATUS\G,确认Slave_IO_Running和Slave_SQL_Running均为Yes,表示复制正常。SHOW DATABASES;查看数据库是否存在;进入目标数据库,执行SHOW TABLES;查看表是否完整;对比源数据库与目标数据库的行数(如SELECT COUNT(*) FROM table_name;)。innodb_buffer_pool_size设置为物理内存的70%-80%、max_connections根据并发量调整),提升数据库性能。rm -rf /var/lib/mysql),释放磁盘空间。