架构传奇服务端时MySQL数据备份有哪些方法

来源: 作者: 点击:
mysqldump命令备份
全库备份
命令示例:mysqldump-uroot-p--all-databases>all_db_backup.sql。这将以超级用户(root)身份,在输入密码(-p表示需要输入密码提示)的情况下,备份所有数据库到名为all_db_backup.sql的文件中。
对于InnoDB存储引擎,如果想要在备份过程中确保数据一致性,可以添加--single-transaction选项,例如:mysqldump-uroot-p--single-transaction--all-databases>all_db_backup.sql。这个选项适用于支持事务的存储引擎(如InnoDB),它通过在一个事务中进行备份操作来保证数据的一致性。
单库备份
例如备份名为legend_game的数据库:mysqldump-uroot-plegend_game>legend_game_backup.sql。
单表备份
备份legend_game数据库中的player_info表:mysqldump-uroot-plegend_gameplayer_info>player_info_backup.sql。
增量备份(结合二进制日志)
首先要开启MySQL的二进制日志(binlog),在my.cnf配置文件中确保log-bin选项已设置。
假设已经有了一个全量备份(例如前面的mysqldump全库备份),之后数据库发生的更改都会记录在二进制日志中。
在需要进行增量备份时,例如可以通过复制二进制日志文件来实现。假设二进制日志文件为mysql-bin.000001,可以将其复制到备份目录下,后续恢复时就可以根据全量备份和二进制日志中的记录来恢复到指定时间点的数据。
mysqlhotcopy备份(适用于MyISAM引擎)
这是一个用Perl编写的备份工具,只能运行在类Unix和NetWare系统上,并且只能备份MyISAM表。
首先需要安装相关的Perl模块,如在基于yum的系统中执行:yuminstall-yperlperl-DBIperl-DBD-MySQL。
备份命令示例:假设备份legend_game数据库到/backup目录,命令为mysqlhotcopy-uroot-plegend_game/backup。它的原理是先锁定要备份的表,将内存中的数据刷新到磁盘,然后复制数据库文件到指定的备份目录。
物理备份(直接复制数据文件)
冷备份(关闭数据库时备份)
关闭MySQL服务。
直接复制MySQL的数据目录(默认在Linux下可能是/var/lib/mysql,在Windows下是安装目录下的data文件夹)到备份存储位置。例如在Linux中,可以使用cp-r/var/lib/mysql/backup/mysql_backup_$(date+%Y%m%d)将数据目录备份到/backup目录下,并以当天日期命名备份文件夹。
这种备份方式简单直接,但需要停止数据库服务,会造成服务中断。
热备份(借助工具在数据库运行时备份)
使用专业的热备份工具如PerconaXtraBackup(开源且免费)。
安装PerconaXtraBackup后,全量备份命令示例:innobackupex--user=root--password=your_password/backup/xtrabackup_full。它可以在不停止数据库服务的情况下备份InnoDB和XapnoDB存储引擎的数据。
增量备份时,例如在已有全量备份的基础上,后续的增量备份命令:innobackupex--user=root--password=your_password--incremental-basedir=/backup/xtrabackup_full--incremental-dir=/backup/xtrabackup_incremental。这里--incremental-basedir指定基于的全量备份目录,--incremental-dir指定增量备份存储的目录。
逻辑备份与物理备份结合
先使用mysqldump进行逻辑备份,获取数据库结构和初始数据的备份。
再使用物理备份工具(如PerconaXtraBackup)进行数据文件的备份,这样在恢复时,如果逻辑备份部分有问题可以通过物理备份进行数据还原,同时物理备份可以更快地恢复数据,逻辑备份可以确保数据库结构等信息的完整性。
使用MySQL自带的复制功能实现备份(从库作为备份)
配置MySQL主从复制,将一个MySQL服务器设置为主服务器(Master),另一个设置为从服务器(Slave)。
在主服务器上的操作:
修改my.cnf配置文件,设置server-id(例如server-id=1),开启二进制日志(log-bin)。
重启主服务器使配置生效。
在从服务器上的操作:
修改my.cnf配置文件,设置server-id(不能与主服务器相同,例如server-id=2)。
重启从服务器后,在从服务器上执行CHANGEMASTERTO语句来指定主服务器的连接信息,例如:CHANGEMASTERTOMASTER_HOST='master_ip'MASTER_USER='repl_user'MASTER_PASSWORD='repl_password'MASTER_LOG_FILE='mysql-bin.000001'MASTER_LOG_POS=107;其中master_ip是主服务器的IP地址,repl_user和repl_password是用于复制的用户名和密码,mysql-bin.000001和107是主服务器二进制日志文件和起始位置。
启动从服务器的复制线程(STARTSLAVE)。
这样从服务器就可以实时获取主服务器的数据,从库可以作为一种备份方式,如果主库出现问题,可以将从库提升为主库继续提供服务。

在架构传奇服务端时,MySQL数据备份有多种方法。其中,mysqldump是一种常用的备份方法,它采用SQL级别的备份机制,将数据表导成SQL脚本文件,在不同的MySQL版本之间升级时相对比较合适。示例:mysqldump-uroot-pdatabasetable>/home/jobs/back.sql,mysqldump也可做增量备份。mysqlhotcopy是一个PERL程序,使用LOCKTABLES、FLUSHTABLES和cp或scp来快速备份数据库,是备份数据库或单个表的最快途径,但只能运行在数据库文件所在的机器上,且只能用于备份MyISAM,只能运行在类Unix和NetWare系统上,支持一次性拷贝多个数据库,同时还支持正则表达。
还可以使用逻辑备份和物理备份。逻辑备份优点包括恢复非常简单、可以通过网络来备份和恢复、备份的结果为ASCII文件可以编辑、与存储引擎无关、非常灵活,可以使用mysqldump的工具提供很多可选项;缺点是必须由数据库服务器来完成备份和恢复过程、备份结果占据更多空间、无法保证还原出来的数据强一致、还原时间长。物理备份优点是备份和恢复操作都比较简单,且能够跨平台、操作系统和MySQL版本,恢复速度快,都是基于文件的,复制到对应的目的地即可,InnoDB需要停止数据库服务,有额外的动作,步骤更少,不需要执行重新生成数据和重建索引的动作,效率提升;缺点是InnoDB备份的原始文件往往比逻辑备份的大很多,空间要求大。
此外,还可以通过找到要备份的数据库或表,鼠标右击选择转储MySQL文件,点击结构和数据进行备份,若数据库被修改出现bug,可以通过鼠标右击找到运行SQL文件,选择备份文件导入恢复数据库。同时,MySQL的数据库可以通过文件形式保存,备份,恢复只要将相应文件目录恢复即可,无需使用其它工具备份,也可以使用官方建议的方法,导出要用到MySQL的mysqldump工具。还有使用MySQLDump进行MySQL备份,mysqldump是MySQL内置的工具,允许用户将数据库指定不同的选项备份到文件、服务器,甚至是压缩gzip文件中。使用MySQLpump进行MySQL备份,它类似于mysqldump,生成支持并行化的逻辑备份。也可以使用AutoMySQLBackup进行MySQL备份,它可以备份服务器上的数据库,保存在单独的文件中,可以压缩该文件。物理冷备也是一种方法,备份时数据库处于关闭状态,直接打包数据库文件。专用备份工具mysqldump或mysqlhotcopy也可用于备份,启用二进制日志进行增量备份也需要刷新二进制日志,第三方工具备份如免费的MySQL热备份软件PerconaXtraBackupmysqlbackup等。
mysqldump备份方法
mysqldump是MySQL官方提供的一款逻辑备份工具。它将生成一组可以导入数据库中以重现原始数据库中的数据和数据库对象的SQL语句。可用于备份恢复、表结构导出、备份上云等场景。
备份整个实例时,包含函数、触发器等对象。命令如下:mysqldump-uroot-p--port=3306--single-transaction--master-data=2--triggers--routines--events--all-databases>./bakup_date+"%F_%H_%M_%S".sql。此命令会备份所有数据库,同时采用了一些参数来确保备份的完整性和一致性。比如,--single-transaction适合InnoDB事务数据库备份,它设定本次会话的隔离级别是repeatableread,确保在备份过程中不会看到其他会话已经提交的数据。--master-data=2会在备份文件中添加一个CHANGEMASTER的语句,并在语句前面添加注释符号,这在主从搭建时会用到。
备份单个数据库的命令为:mysqldump-uroot-p--port=3306--single-transaction--master-data=2--triggers--routines--events--databasesdb_name>./bakup_date+"%F_%H_%M_%S".sql。如果只需要备份某个表,可以使用如下命令:mysqldump-uroot-p--port=3306--set-gtid-purged=OFF--single-transaction--databasesdb_name--tablestable_name>./bakup_date+"%F_%H_%M_%S".sql。恢复表时,如果目标库有同表名,会被drop掉,如果想避免风险需添加skip-add-drop-table。
此外,还可以仅导出单表数据,命令为:仅有数据,没有表结构。mysqldump-uroot-p--port=3306--databasesdb_name--tablestable_name--no-create-info>./bakup_date+"%F_%H_%M_%S".sql。也可以仅导出单表部分数据,通过添加条件语句来实现特定数据的备份。
mysqlhotcopy备份方法
mysqlhotcopy是一种快速备份方法,它只支持MyISAM引擎。其使用LOCKTABLES、FLUSHTABLES和CP来进行快速备份,占用资源和备份速度比mysqldump快很多很多。特别适合大的数据库。
原理是先将需要备份的数据库加上一个读锁,然后用FLUSHTABLES将内存中的数据写回到硬盘上的数据库,最后,把需要备份的数据库文件复制到目标目录。命令格式为:(root@localhost~)#mysqlhotcopy(option)db_name1db_name2backup_dir。其中,db_name是数据库名称,backup_dir是备份到哪个目录下。
使用mysqlhotcopy需要安装perl支持,因为mysqlhotcopy是prel语言写的。所以使用前先安装一下啊以下三个perl包:yuminstall-yperlperl-DBIperl-DBD-MySQL。安装好了之后就可以直接使用mysqlhotcopy了。
常用选项有很多,比如可以加一个--flushlog刷新二进制文件。mysqlhotcopy-u...-ppassword-S/tmp/...sock库名(多库名空格隔开)备份的目录。还可以使用-q安静模式,或者--flushlog刷新二进制日志。
使用官方建议方法备份
目前没有明确的“官方建议唯一方法”,但从各种资料来看,不同的场景下有不同的推荐。比如对于小型数据库或者对备份速度要求不高的场景,可以使用mysqldump。而对于一些大规模数据库,可能需要考虑使用专业的备份工具或者结合多种方法进行备份。
官方通常强调定期备份的重要性,以防止软件错误或硬盘驱动器故障导致的数据丢失。为了保证备份数据的可靠性和安全性,应该定期进行备份,并将备份数据存储在安全的地方。同时,也应该测试备份数据的还原过程,以确保备份数据的完整性和正确性。
MySQLDump备份
不太明确这里的“MySQLDump备份”具体是指哪种特殊的备份方式,可能是对mysqldump的一种不规范的称呼。mysqldump备份如前所述,是MySQL官方提供的逻辑备份工具,可备份整个数据库、单个数据库或特定的表。它通过生成SQL语句来实现备份,备份文件可以在不同的MySQL版本之间进行恢复,具有较高的通用性。但备份文件相对较大,恢复时间也可能较长,特别是对于大规模数据库。
MySQLpump备份
MySQL5.7之后多了一个备份工具MySQLpump。它是mysqldump的一个衍生,属于逻辑备份,备份以SQL形式的文本保存。
特点包括并行备份数据库和数据库中的对象,加快备份过程。更好地控制数据库和数据库对象(表、存储过程、用户帐户)的备份。备份用户账号作为帐户管理语句(CREATEUSER,GRANT),而不是直接插入到MySQL的系统数据库。备份出来直接生成压缩后的备份文件。备份进度指示(估计值)。重新加载(还原)备份文件,先建表后插入数据最后建立索引,减少了索引维护开销,加快了还原速度。
可以通过指定线程数来加快转储过程,例如使用八个线程进行完整备份:shell>mysqlpump-u<user_name>-p<password>--default-parallelism=8>full_backup.sql。还可以使用正则表达式排除/包含数据库对象,备份以prod结尾的所有数据库:shell>mysqlpump--include-databases=%prod--result-file=db_prod.sql。也可以备份用户,比如:shell>mysqlpump--exclude-databases=%--users>users_backup.sql。同时,MySQLpump支持压缩备份,可使用–compress-output=lz4或–compress-output=zlib,并在需要时进行解压。
AutoMySQLBackup备份
AutoMySQLBackup是一个致力于简化MySQL数据库备份流程的开源工具。它源自SourceForge的经典项目,并经过进一步开发与优化,专为简化MySQL数据库备份过程而来。
该工具默认将每个数据库备份到单独的、压缩过的(gzip格式)SQL文件中,便于管理和恢复。其核心在于对mysqldump命令的有效利用,同时,它针对MySQL5.6和5.7版本进行了特别支持,包括对登录路径的支持,这是一种更安全的凭证保存方式。自MySQL5.7起,它还明智地调整了SSL参数使用,以适应新的--ssl-mode=REQUIRED设置。对于不提供mysql_config_editor的MariaDB,它同样提供了灵活的解决方案。
使用AutoMySQLBackup可以实现定期自动备份,防止因意外导致的数据丢失,特别是在没有专职DBA的小团队中。通过简单的命令或定时任务配置,就能实现从单个数据库到整个服务器集群的数据保护。具体步骤如下:下载AutoMySQLBackup,创建配置文件,设置定时任务,比如设定每天备份。
专用备份工具备份
除了上述常见的备份方法外,还有一些专用备份工具可供选择。比如Percona公司开发的Xtrabackup,它是实时热备工具,能够在不停机的情况下进行快速可靠的热备份,并且备份期间不会间断数据库事务的处理。它支持数据的全备和增备,适用于生产环境的大规模数据库备份。
另外,还有一些第三方备份工具,如备份宝、手机备份、360AI云盘、百度网盘等,虽然这些主要是用于手机数据备份,但也可以作为一种参考,在特定情况下可以考虑将数据库备份文件存储在这些云存储服务中,以增加数据的安全性和可访问性。
在架构传奇服务端时,选择合适的MySQL数据备份方法需要考虑多个因素。如果是小型服务端,数据量不大,对备份速度要求不高,可以选择mysqldump进行备份,它简单易用,通用性强。如果服务端规模较大,对备份速度和效率有较高要求,可以考虑使用MySQLpump或AutoMySQLBackup,它们具有并行备份等功能,可以加快备份过程。对于重要的生产环境,特别是大规模数据库,可以考虑使用专业的备份工具如Xtrabackup,以确保数据的安全性和可靠性。同时,无论选择哪种备份方法,都应该定期进行备份测试,确保备份文件的可恢复性,以应对可能出现的意外情况。
[顶部]