【进阶】迁移mysql数据库(小白详细教程)

基础数据库迁移

  1. 从原数据库导出数据

打开终端或命令提示符,使用mysqldump导出原数据库的数据。

如:导出其中的一个数据库database1的全部数据到database1_dump.sql 文件
mysqldump -uusername1 -ppassword1 -hremote_host1 -P3306 database1 > database1_dump.sql 
  1. 创建新数据库
    通过 MySQL 客户端连接到目标 MySQL 服务器,在目标 MySQL 服务器中创建一个新的数据库database1_new来存放原数据库database1的数据。
CREATE DATABASE database1_new;
或 
CREATE DATABASE IF NOT EXISTS database1_new;
  1. 将导出的 SQL 文件database1_dump.sql导入到刚刚创建的新数据库database1_new中。
mysql -uusername1 -ppassword1 -hremote_host1 -P3306 database1_new < database1_dump.sql
// tips:命令中的用户、密码、ip、port根据实际情况填写
1、若干ip跟原数据库一致,这种是同一个mysql服务器之中迁移数据库
2、如果ip是新的ip,也就是不同的mysql服务器之间迁移数据库

常用备份参数介绍

//1、如果你需要只复制数据库的表结构而不包括数据,可以使用 --no-data 参数:
mysqldump -uusername1 -ppassword1 -hremote_host1 -P3306 --no-data database1 > database1_nodata_dump.sql 
//2、如果你只需要导出数据而不包括表结构,可以使用 --no-create-info 参数
//3、如果你想要完整的数据库复制(包括结构和数据),则只需使用最初的命令即可。

--single-transaction 参数:在导出数据时开启一个事务,确保数据的一致性(适用于 InnoDB 存储引擎的表)
  1. 备份范围
--all-databases # 备份所有数据库(简化操作,无需指定库名)。
--databases db1 db2 # 备份多个指定数据库(用空格分隔)。
--ignore-table=db.table # 忽略指定表(可多次使用,如--ignore-table=mydb.logs)。
  1. 备份内容控制
--no-data
仅备份表结构,不备份数据(适用于迁移表结构)。
--no-create-info
仅备份数据,不备份表结构(需配合已有结构的恢复)。
--skip-triggers
不备份触发器。
--skip-routines
不备份存储过程和函数(默认备份)。
--events
备份事件调度器(需显式启用)。
  1. 备份优化与压缩
--single-transaction
InnoDB 专用:开启事务确保一致性快照(避免锁表,需配合--quick)。
--quick
逐行导出数据,减少内存占用(默认启用)。
--compress
压缩客户端与服务器之间的传输数据(网络带宽优化)。
--result-file=file
直接指定输出文件路径(避免重定向符号>的编码问题)。
  1. 高级选项
--where="condition"
按条件导出数据(如--where="id>100")。
--hex-blob
以十六进制格式导出二进制字段(避免乱码)。
--add-drop-database
在CREATE DATABASE前添加DROP DATABASE语句(覆盖式恢复)。
--skip-lock-tables
不锁表(可能导致备份不一致,慎用)。

典型使用场景

# 压缩备份,直接压缩输出
mysqldump -u root -p123456 mydb |gzip> backup.sql.gz
# 解压恢复gzip-d backup.sql.gz
mysql -u root -p123456 mydb < backup.sql

注意事项

  1. 权限要求:确保用户有SELECT(数据)、SHOW VIEW(视图)、TRIGGER(触发器)等权限。
  2. 锁表问题:
  • 默认情况下,mysqldump会锁表(MyISAM 引擎)。
  • 对 InnoDB 使用–single-transaction避免锁表(需在事务隔离模式下运行)。
  1. 大表备份优化:
  • 结合–quick和–single-transaction减少内存占用。
  • 分批次导出(如按时间范围)。
  1. 备份验证:恢复前建议检查备份文件完整性(如head/tail查看关键语句)。
    实战技巧
  • 定时备份:通过cron设置每日自动备份:bash复制# 每天 2 点备份并压缩02 * * * mysqldump -u root -p123456 --all-databases |gzip> /backups/db_$(date +%F).sql.gz
  • 增量备份:配合binlog实现(需启用 MySQL 二进制日志)。
  • 远程备份:bash复制mysqldump -h remote_host -u root -p123456 mydb |ssh user@local “cat > backup.sql”
    掌握这些参数和场景,即可高效完成 MySQL 数据的备份与恢复!

mysqldump 详细说明与原理介绍

mysqldump 概述

mysqldump 是 MySQL 数据库中用于逻辑备份的工具。它通过生成 SQL 语句将数据库的结构和数据导出到一个文件中,适用于规模较小、业务不繁忙的数据库备份需求。其原理主要包括获取一致性快照、备份表结构和数据、处理事务和非事务表等。通过合理使用 mysqldump 的参数,可以实现高效、可靠的数据库备份和恢复操作。mysqldump 支持多种备份方式,包括全库备份、单库备份、单表备份等。

mysqldump 的原理

mysqldump 的工作原理是通过执行一系列 SQL 命令来获取数据库的结构和数据,并将其写入一个 SQL 文件中。以下是其主要步骤和原理:

  1. 获取一致性快照
    在执行备份时,mysqldump 通过以下命令确保数据的一致性:
  • FLUSH TABLES WITH READ LOCK:该命令会关闭所有打开的表,并对所有表加全局读锁。它的作用是确保在备份过程中不会有数据修改。
  • START TRANSACTION WITH CONSISTENT SNAPSHOT:该命令用于开启一个事务一致性快照,确保在备份期间读取的数据是事务开始时的一致性状态。
  1. 备份表结构和数据
    mysqldump 会逐个表执行 SHOW CREATE TABLE 命令以获取表结构,然后使用 SELECT * FROM 命令获取表的数据。这些数据会以 INSERT 语句的形式写入备份文件。
  2. 处理事务和非事务表
    对于支持事务的表(如 InnoDB),mysqldump 使用 --single-transaction 参数来确保备份的一致性。对于非事务表(如 MyISAM),mysqldump 会通过全局读锁 (FLUSH TABLES WITH READ LOCK) 来确保数据一致性。
  3. 备份存储过程和函数
    通过 -R 参数,mysqldump 可以备份数据库中的存储过程和函数。
  4. 记录二进制日志信息
    使用 --master-data 参数,mysqldump 会在备份文件中记录当前二进制日志的状态信息(如 MASTER_LOG_FILE 和 MASTER_LOG_POS),这对于主从复制中的数据恢复非常有用。

mysqldump 的常用命令

  1. 备份全库
mysqldump -uusername -ppassword --all-databases > all_databases.sql  
  1. 备份单个数据库
mysqldump -uusername -ppassword database_name > database_name.sql  
  1. 备份单个表
mysqldump -uusername -ppassword database_name table_name > table_name.sql  
  1. 只备份表结构
mysqldump -uusername -ppassword --no-data database_name > database_structure.sql  
  1. 只备份数据
mysqldump -uusername -ppassword --no-create-info database_name > database_data.sql  
  1. 使用事务一致性备份
mysqldump -uusername -ppassword --single-transaction database_name > database_name.sql  

mysqldump 的注意事项

  1. 非事务表的锁问题:对于 MyISAM 等非事务表,FLUSH TABLES WITH READ LOCK 可能会导致较长时间的锁等待,影响数据库的性能。
  2. 数据库大小限制:mysqldump 适用于中小型数据库,对于大型数据库,建议使用物理备份工具如 XtraBackup。
  3. 备份文件的安全性:备份文件中可能包含敏感信息,需妥善保管。
  4. 恢复时的字符集问题:在备份和恢复时,需确保源数据库和目标数据库的字符集一致,以避免数据乱码问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值