前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【腾讯云】云上MySQL数据库如何全量备份数据base脚本?

【腾讯云】云上MySQL数据库如何全量备份数据base脚本?

原创
作者头像
TCS-F
修改2021-10-23 14:59:43
1.5K0
修改2021-10-23 14:59:43
举报
文章被收录于专栏:云攻略专区云攻略专区

《MySQL管理之道》一书中学习到对于MySQL数据库管理,如何全量备份MySQL数据库:

脚本代码:

代码语言:javascript
复制
#!/bin/bash 
mkdir /backup
cd /backup
dateDIR='date+"%y-%m-%d"'
mkdir -p $dateDIR/data
path=/usr/local/mysql/data
for i in 'mysql -u root -p123456 -e "show database"|grep -v "Database"'
  do
    mysqldump -uroot -p123456  --default-chareacter-set=utf-8 \-q   --lock-all-tables --flush-logs -E -R --triggers -B $i | gzip >  /backup/$dateDIR/${i}_${dateDIR}.sql.gz
  done

bilog_rm='tail -n 1 $path/mysql-bin.index | sed 's/.\///''
msyql -uroot -p123456 -e "purge binary logs to '$binlog_rm'"

》》》》参考网络文章,深入学习MySQL数据库备份

mysqldump工具备份

备份整个数据库

代码语言:javascript
复制
$> mysqldump -u root -h host -p dbname > backdb.sql

备份数据库中的某个表

代码语言:javascript
复制
$> mysqldump -u root -h host -p dbname tbname1, tbname2 > backdb.sql

备份多个数据库

代码语言:javascript
复制
$> mysqldump -u root -h host -p --databases dbname1, dbname2 > backdb.sql

备份系统中所有数据库

代码语言:javascript
复制
$> mysqldump -u root -h host -p --all-databases > backdb.sql
直接复制整个数据库目录(对于InnoDB存储引擎不适用)备份

windowns: installpath/mysql/data

linux: /var/lib/mysql

在复制前需要先执行如下命令:

代码语言:javascript
复制
MYSQL> LOCK TABLES;
# 在复制过程中允许客户继续查询表,
MYSQL> FLUSH TABLES;
# 将激活的索引页写入硬盘。
mysqlhotcopy工具备份

备份数据库或表最快的途径,只能运行在数据库目录所在的机器上,并且只能备份MyISAM类型的表。

要使用该备份方法必须可以访问备份的表文件。

代码语言:javascript
复制
$> mysqlhotcopy -u root -p dbname /path/to/new_directory;
#将数据库复制到new_directory目录。
mysql命令导入sql文件还原
代码语言:javascript
复制
$> mysql -u root -p [dbname] < backup.sql
# 执行前需要先创建dbname数据库,如果backup.sql是mysqldump创建的备份文件则执行是不需要dbname。
MYSQL> source backup.sql;
# 执行source命令前需要先选择数据库。
直接复制数据库目录还原

注: 该方式必须确保原数据库和待还原的数据库主版本号一致,并且只适用于MyISAM引擎的表。

  1. 关闭mysql服务。
  2. 将备份的文件或目录覆盖mysql的data目录。
  3. 启动mysql服务。
  4. 对于linux系统,复制完文件后需要将文件的用户和组更改为mysql运行的用户和组。
mysqlhotcopy快速恢复

停止mysql服务,将备份数据库文件复制到存放数据的位置(mysql的data文件夹),重先启动mysql服务即可(可能需要指定数据库文件的所有者)。

代码语言:javascript
复制
$> cp -R /usr/backup/test /usr/local/mysql/data
# 如果恢复的数据库已经存在,则使用DROP语句删除已经存在的数据库之后,恢复才能成功,还需要保证数据库版本兼容。
相同版本数据库之间迁移
代码语言:javascript
复制
$> mysqldump -h www.abc.com -uroot -p password dbname | 
$> mysqldump -h www.bcd.com -uroot -p password
# 将服务器www.abc.com的数据库dbname迁移到服务器www.bcd.com的相同版本数据库上。
不同版本的mysql数据库之间的迁移

备份原数据库。

卸载原数据库。

安装新数据库。

在新数据库中还原备份的数据库数据。

数据库用户访问信息需要备份mysql数据库。

默认字符集问题,MySQL4.x中使用latin1作为默认字符集,mysql5.x使用utf8作为默认字符集。如果有中文数据需要对默认字符集进行更改。

不同数据库之间的迁移

MyODBC工具实现MySQL和SQL Server之间的迁移。

MySQL Migration Toolkit工具。

表的导出和导入

SELECT ...... INTO OUTFILE 导出文本文件,该方法只能导出到数据库服务器上,并且导出文件不能已存在。

代码语言:javascript
复制
MYSQL> SELECT ...... INTO OUTFILE filename [OPTIONS]
MYSQL> SELECT * FROM test.person INTO OUTFILE "C:\person0.txt";
# 将表person里的数据导入为文本文件person0.txt。

mysqldump文件导出文本文件(和INTO OUTFILE不一样的是该方法所有的选项不需要添加引号)

代码语言:javascript
复制
$> mysqldump -T path -u root -p dbname [tables] [OPTIONS]
# -T参数表明导出文本文件。path导出数据的目录。
$> mysqldump -T C:\test person -u root -p
# 将test表中的person表导出到文本文件。执行成功后test目录下会有两个文件,person.sql和person.txt

mysql命令导出文本文件

代码语言:javascript
复制
MYSQL> mysql -u root -p --execute="SELECT * FROM person;" test > C:\person3.txt;
# 将test数据库中的person表数据导出到person3.txt文本文件中。--vartical参数可以将一行分为多行显示。
MYSQL> mysql -u root -p --vartical --execute="SELECT * FROM person;" test > C:\person3.txt;
# --html将表导出为html文件,--xml文件将表导出为xml文件

LOAD DATA INFILE导入文本文件

代码语言:javascript
复制
MYSQL> LOAD DATA INFILE 'filename.txt' INTO TABLE tablename [OPTIONS] [IGNORE number LINES];
# [IGNORE number LINES]表示忽略行数
MYSQL> LOAD DATA INFILE 'C:\person0.txt' INTO TABLE test.person;

mysqlimport导入文本文件

代码语言:javascript
复制
$> mysqlimport -u root -p dbname filename.txt [OPSTONS]
# 导入的表名有文件名决定,导入数据之前表必须存在
$> mysqlimport -uroot -p test C:\backup\person.txt
# 将数据导入到test数据库的person表中。
使用mysqlbinlog恢复数据
代码语言:javascript
复制
$> mysqlbinlog [option] filename | mysql -u user -p password
# filename为二进制日志文件,
$> mysqlbinlog --stop-date="2013-03-30 15:27:47" D:\MySQL\log\binlog\binlog.000008 | mysql -u root -p password
# 根据日志文件binlog.000008将数据恢复到2013-03-30 15:27:47以前的操作。
启动二进制日志
代码语言:javascript
复制
log-bin = path/filename	#日志文件存储目录和文件名
expire_log_days = 10	#日志自动删除时间
max_binlog_size = 100M	# 日志文件最大大小
查看二进制日志
代码语言:javascript
复制
MYSQL> SHOW VARIABLES LIKE 'log_%';
MYSQL> SHOW BINARY LOGS;
$> mysqlbinlog filename
# filename为二进制日志文件名。
删除二进制日志
代码语言:javascript
复制
MYSQL> RESET MASTER; #删除所有二进制日志
MYSQL> PURGE {MASTER | BINARY} LOGS TO 'log_name';	#删除文件编号小于log_name编号的文件
MYSQL> PURGE {MASTER | BINARY} LOGS BEFORE 'date';	#删除指定日期以前的文件
暂时停止二进制日志(不需要重启mysql服务)
代码语言:javascript
复制
MYSQL> SET sql_log_bin = {0|1}	#暂停或启动二进制日志。

数据库备份原理
数据库备份原理

推荐阅读:

  • 基于腾讯云CVM自建高可用Redis实践 https://cloud.tencent.com/act/cps/redirect?redirect=11
  • 基于腾讯云CVM搭建Hadoop集群并做数据迁移 https://cloud.tencent.com/act/cps/redirect?redirect=12&
  • 腾讯云 CVM 标签实践分享 https://cloud.tencent.com/act/cps/redirect?redirect=14&
  • 主机迁移实践分享 https://cloud.tencent.com/act/cps/redirect?redirect=15&
  • 本地IDC机房数据库容灾解决方案 https://cloud.tencent.com/act/cps/redirect?redirect=16&
  • 基于云联网跨账户云资源内网互通解决方案 https://cloud.tencent.com/act/cps/redirect?redirect=34664&
  • 轻量应用服务器最佳实践:https://cloud.tencent.com/act/pro/lighthouse_new
  • 腾讯云“双十一”活动优惠清单:https://cloud.tencent.com/act/cps/redirect?redirect=34875

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
作者已关闭评论
0 条评论
热度
最新
推荐阅读
目录
  • 《MySQL管理之道》一书中学习到对于MySQL数据库管理,如何全量备份MySQL数据库:
    • mysqldump工具备份
      • 直接复制整个数据库目录(对于InnoDB存储引擎不适用)备份
        • mysqlhotcopy工具备份
          • mysql命令导入sql文件还原
            • 直接复制数据库目录还原
              • mysqlhotcopy快速恢复
                • 相同版本数据库之间迁移
                  • 不同版本的mysql数据库之间的迁移
                    • 表的导出和导入
                      • 使用mysqlbinlog恢复数据
                        • 启动二进制日志
                          • 查看二进制日志
                            • 删除二进制日志
                              • 暂时停止二进制日志(不需要重启mysql服务)
                              • 推荐阅读:
                              相关产品与服务
                              云服务器
                              云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
                              领券
                              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档