MySQL-mysqldump

MySQL数据库备份的两种方式:MySQLdump,XBK
参考地址:http://dljz.nicethemes.cn/news/show-32053.html

1 First Meeting

简介:MySQLdump是MySQL用于备份和数据库转移的一个工具。

工作方式:主要产生一系列的SQL语句,可以封装到文件,该文件包含所有重建备份数据库所需要的SQL命令和create database、create table、insert等等。mysqldump 是将数据表导成 SQL 脚本文件,在不同的 MySQL 版本之间升级时相对比较合适,这也是最常用的备份方法。

使用场景:一般在数据量很小(几个G)的时候,可以用于备份。当数据量比较大的情况下,不建议使用MySQLdump。可以用来实现轻量级的快速迁移或恢复数据库。

注意:使用MySQL dump的时候,把二进制日志GTID事务唯一ID开启。

2 MySQLdump参数

参数
--host 指定要备份数据库的服务器
--password 连接MySQL服务器的密码
--port MySQL服务器的端口号
--user 连接MySQL服务器的用户名
--all-databasess(-A) 备份MySQL服务器上的所有数据库
--databases(-B) 备份1或多个数据库,在参数后添加数据库名即可
--complete-insert (-c) 使用完整的insert语句会包含表中的列信息,这么做可以提高插入效率。
-R 存储过程和函数
--no-data(-d) 只备份表结构,不备份表数据
--quick(-q) 相当于加sql_no_query,意味着并不会读取缓存中的数据。
--add-drop-table 在每个创建数据库表语句前添加删除数据库表的语句
--force 当出现错误时仍然继续备份操作
--default-character-set 指定默认字符集
--add-locks 备份数据库表时锁定数据库表
--comments 添加注释信息
--compact 压缩模式,产生更少的输出
--where=name(-w) 按条件备份出想要的数据
--triggers 触发器
--master-data=2 值为1:change master to 语句可以被slave直接执行;值为2:change master会被注释
--single-transaction 不加此参数为热备份,加了对于InnoDB表不锁表备份(快照备份),用于保证innodb备份数据时的一致性,配合RR隔离级别一起使用,当发起事务时,读取一个数据的快照,知道备份结束时,都不会读取到本事务开始提交的任何数据。
--set-gtid-purged=AUTO/ON 使用AUTO/ON主从复制的时候 在从上备份的时候删除事务ID号 从新来
--set-gtid-purged=OFF 仅是做普通的本机备份恢复时,可以添加,
--max_allowed_packet=128M 控制的是备份时传输单个数据包的大小

3 示例备份

以下命令全在数据库服务外使用,如果在服务内使用,所有命令前面加system

备份所有数据库

# --set-gtid-purged=OFF(关闭事务id号处理)为了防止恢复数据的时候因事务ID号阻断恢复
# --single-transaction (快照备份、热备份)
mysqldump -uroot -p -A -R --triggers --set-gtid-purged=OFF --master-data=2 --single-transaction > /tmp/backup.sql

如果出现:Error: Binlogging on server not active
解决办法:
vi /etc/my.cnf
在【mysqld】 最下方 加入:
log-bin=mysql-bin
重启mysqld生效。

导出整个数据库

mysqldump -u 用户名 -p 数据库名 > 导出的文件名
mysqldump -u linuxde -p smgp_apps_linuxde > linuxde.sql

导出一个表

mysqldump -u 用户名 -p 数据库名 表名> 导出的文件名
mysqldump -u linuxde -p smgp_apps_linuxde users > linuxde_users.sql

导出一个数据结构

mysqldump -u linuxde -p -d --add-drop-table smgp_apps_linuxde > linuxde_db.sql

4 其他

4.1 导出数据内容cvs

mysql -A xsd-prod -u root -p -e
"
SELECT
a.id,
a.order_num,
a.license_number
WHERE a.status=2 and a.total_cost > 0 and a.create_time >= '2022-02-11 00:00:00' AND a.create_time <= '2022-02-20 23:59:59'
group by a.id
order by create_time desc;
"
> order.csv

4.2 导入sql

# 数据库服务外
mysql -uroot -p <baskup.sql
# 数据库服务内
source /tmp/a.sql
posted @   生生灯火半杯月  阅读(451)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示