TH小破站

  • 首页
  • 容器
    • 认识Docker
    • DockerFile详解
  • k8s
    • 认识Kubernetes
    • Kubernetes部署--(kubeadm方式)
    • kubeasz部署k8s集群
    • Ansible-binary部署k8s集群-1.31.2
  • Ceph
    • 认识分布式存储
    • CPEH部署
  • CI/CD
    • DevOps认识
    • 部署--Gitlab
  • ELK
    • ELK简介
    • Elasticsearch
    • Kibana部署
    • Logstash
    • ELK--收集 tomcat 日志(实战)
  • HD
    • 认识--大数据
    • Hadoop-单机部署
    • Hadoop-伪分布部署
    • Hadoop-完全分布部署
    • Hadoop-(HA)完全分布部署
    • Ambari自动部署--Hadoop
  • Nginx
    • Nginx功能介绍
    • Nginx安全选项
    • Nginx配置文件简单介绍
    • 网站服务器部署
  • 监控
    • ZABBIX-部署(yum)
    • ZABBIX-编译安装
  • 云计算
    • KVM 概述
    • OpenStack企业级部署(T版)
    • OpenStack之dashboard部署
    • OpenStack-controller的高可用
    • openstack(Caracal版_ubuntu版本)部署
  • 数据库
    • mariadb与mysql
    • mysql主从
    • MySQL--冷备(实战)
    • MySQL--热备(dump表)
    • MySQL--热备(dump库)
    • 数据恢复实战案例
    • Xtrabackup实现MySql8.x全量备份
    • MyCat实现数据库读写分离
    • MHA实现数据库高可用
    • Percona XtraDB(PXC)实现数据库集群高可用
    • 数据库压力测试
    • PostgreSQL 基操
    • PostgreSQL备份恢复
    • PostgreSQL高可用
    • MongDB安装配置基础使用
    • MongoDB实现复制集
    • MongoDB备份还原
  • 自动化
    • ssh远程服务原理及配置
    • Ansible剧本文件应用
    • Ansible管理服务介绍
    • Ansible自动化部署node_exporter(包含升级,回滚)
    • Saltstack-部署安装
  • 脚本
    • 一键查看服务器资源利用率
    • 一键生成SSL证书
    • 保存指定数量的文件/目录
    • 初始化服务器
    • 扫描可用IP
    • 批量分发SSH密钥
    • 监控多主机磁盘脚本
    • 一键安装MySQL8.x脚本
    • Python脚本监控ES集群
    • 资源巡检脚本
    • 查看各用户使用的cpu占比
热衷于分享
架构师成长之路 !!!
  1. 首页
  2. 数据库
  3. 正文

Mysqldump用法(干货)

2024年10月18日 851点热度 2人点赞 0条评论

热备

mysqldump用法

 -A, --all-databases      #备份所有数据库,含create database
 -B, --databases db_name  #指定备份的数据库,包括create database语句
 -E, --events:           #备份相关的所有event scheduler
 -R, --routines:         #备份所有存储过程和自定义函数
 --triggers:             #备份表相关触发器,默认启用,用--skip-triggers,不备份触发器
 --default-character-set=utf8 #指定字符集
 --master-data[=*]:      #此选项须启用二进制日志
 *=1:所备份的数据之前加一条记录为CHANGE MASTER TO语句,非注释,不指定#,默认为1,适合于主从复制多机使用
 *=2:记录为被注释的#CHANGE MASTER TO语句,适合于单机使用
 #此选项会自动关闭--lock-tables功能,自动打开-x | --lock-all-tables功能(除非开启--single-transaction
 ​
 -F, --flush-logs        #备份前滚动日志,锁定表完成后,执行flush logs命令,生成新的二进制日志文件,配合-A 或 -B 选项时,会导致刷新多次数据库。建议在同一时刻执行转储和日志刷新,可通过和--single-transaction或-x,--master-data 一起使用实现,此时只刷新一次二进制日志
 --compact               #去掉注释,适合调试,生产不使用
 -d, --no-data           #只备份表结构,不备份数据
 -t, --no-create-info    #只备份数据,不备份表结构,即create table
 -n, --no-create-db       #不备份create database,可被-A或-B覆盖
 --flush-privileges      #备份mysql或相关时需要使用
 -f, --force             #忽略SQL错误,继续执行
 --hex-blob              #使用十六进制符号转储二进制列,当有包括BINARY, VARBINARY,BLOB,BIT的数据类型的列时使用,避免乱码
 -q, --quick             #不缓存查询,直接输出,加快备份速度
 ​
 ​
 --------------------------------------------------------
 # InnoDB建议使用的备份参数
 mysqldump –uroot -p密码 –A –F –E –R --triggers --single-transaction --master-data=1 --flush-privileges --default-character-set=utf8 --hex-blob > ${BACKUP}/fullbak_${BACKUP_TIME}.sql
  
 # MyISAM建议使用的备份参数
 mysqldump –uroot -p密码 –A –F –E –R –x --master-data=1 --flush-privileges --triggers --default-character-set=utf8 --hex-blob > ${BACKUP}/fullbak_${BACKUP_TIME}.sql
 --------------------------------------------------------

单表备份

 "单表备份"
 -------------------------------------------------------------------
 # 单表备份
 mysqldump -u账号 -p密码 -S [MySQL的mysql.sock文件] [数据库名] [表名] > test.sql  
 # 还原方法一
 mysql -u账号 -p密码 [表对应的数据库名] < test.sql  
 # 还原方法二(建议使用这种方法)
 mysql -u账号 -p密码 # 兼容到数据库执行下面命令
 mysql> set sql_log_bin=0;
 mysql> source /root/test.sql ; #注意 /root/test.sql 表示mysqldump导出文件存放的绝对路径
 mysql> set sql_log_bin=1;
 # 恢复时最好先在配置文件中加入 skip_networking=on 禁止用户在写入数据,等数据修复好了在打开
 # 注意一般在恢复时都要先关闭二进制日志的记录,等恢复完数据在打开二进制日志的记录
 -------------------------------------------------------------------

数据库备份

 "数据库备份"
 -------------------------------------------------------------------
 # 把两个数据库备份备份到一起
 mysqldump -u账号 -p密码 -S [MySQL的mysql.sock文件] -B [数据库名1] [数据库名2] > test_B.sql
 ####分库备份直接 -B 跟指定数据库名就行
 ​
 # 还原方法一
 mysql -u账号 -p密码  < test_B.sql
 # 还原方法二(建议使用这种方法)
 mysql -u账号 -p密码 # 兼容到数据库执行下面命令
 mysql> set sql_log_bin=0;
 mysql> source /root/test_B.sql ; #注意 /root/test_B.sql 表示mysqldump导出文件存放的绝对路径
 mysql> set sql_log_bin=1;
 -------------------------------------------------------------------
 ​
 "全备份  及把所有数据库进行备份适用于数据量小场景"
 # 注意全量不上真正意义的全量 information_schema和performance_schema这两个表不会备份
 -------------------------------------------------------------------
 mysqldump -u账号 -p密码 -S [MySQL的mysql.sock文件] -A > test_A.sql
 # 还原方法一
 mysql -u账号 -p密码  < test_B.sql
 # 还原方法二(建议使用这种方法)
 mysql -u账号 -p密码 # 兼容到数据库执行下面命令
 mysql> set sql_log_bin=0;
 mysql> source /root/test_A.sql ; #注意 /root/test_B.sql 表示mysqldump导出文件存放的绝对路径
 mysql> set sql_log_bin=1;
 -------------------------------------------------------------------

通过脚本实现所有数据库的备份

1)准备数据

 # 准备两个数据库db1 db2 
 mysql> show databases;
 +--------------------+
 | Database           |
 +--------------------+
 | db1                |
 | db2                |
 | information_schema |
 | mysql              |
 | performance_schema |
 | sys                |
 +--------------------+
 # db1和db2的表数据为
 mysql> select * from db2.student2 ;
 +----+---------+------+--------+
 | id | name    | age  | gender |
 +----+---------+------+--------+
 |  1 | wangmaz |   31 | M      |
 +----+---------+------+--------+
 ​
 mysql> select * from db2.student2 ;
 +----+---------+------+--------+
 | id | name    | age  | gender |
 +----+---------+------+--------+
 |  1 | wangmaz |   31 | M      |
 +----+---------+------+--------+

2)编写脚本

 [root@expr01 ~]# cat mysql_backup.sh
 #!/bin/bash
 # ------------------------------------------ 
 # Filename:     mysql_backup.sh 
 # Version:      1.1
 # Date:         2023/12/10
 # Author:       tanghao 
 # Email:        2826588067@qq.com 
 # Description:  This is the script 
 # Copyright:    2023 tanghao 
 # License:      GPL 
 # ------------------------------------------
 # 备份目录
 bakDir=/backup
 PASSWD=123456
 test ! -d $bakDir  && mkdir -p $bakDir
 database_num=$(mysql -uroot -p$PASSWD  -e 'show databases' 2>/dev/null | grep -Ev 'Database|information_schema|performance_schema|sys')
 for db in $database_num ;do 
   mysqldump -uroot -p$PASSWD -S /apps/mysql/data/mysql.sock -B $db > /backup/${db}_`date +%F`.sql 2>/dev/null
 done

3)执行脚本实现备份

 [root@expr01 ~]# bash mysql_backup.sh 
 [root@expr01 ~]# ls /backup/
 db1_2023-12-10.sql  db2_2023-12-10.sql

4)人为删除db1和db2数据库

 [root@expr01 ~]# mysql -uroot -p123456 -e "drop  database db1"
 [root@expr01 ~]# mysql -uroot -p123456 -e "drop  database db2"
 [root@expr01 ~]# mysql -uroot -p123456 -e "show databases "
 mysql: [Warning] Using a password on the command line interface can be insecure.
 +--------------------+
 | Database           |
 +--------------------+
 | information_schema |
 | mysql              |
 | performance_schema |
 | sys                |
 +--------------------+

5)恢复db1和db2数据

 [root@expr01 ~]# mysql -uroot -p123456 
 # 临时关闭二进制记录
 mysql> set sql_log_bin=0;
 # 恢复数据
 mysql> source /backup/db1_2023-12-10.sql
 mysql> source /backup/db2_2023-12-10.sql
 # 开启二进制记录
 mysql> set sql_log_bin=1;
 ​
 ---------------------------------------------------------------------
 #也可以这样恢复但是不建议!!!
 [root@expr01 ~]# mysql -uroot -p123456 < /backup/db1_2023-12-10.sql 
 [root@expr01 ~]# mysql -uroot -p123456 < /backup/db2_2023-12-10.sql 
 ---------------------------------------------------------------------

6)验证恢复的数据

 # 验证db1和db2数据库恢复情况
 mysql> show databases;
 +--------------------+
 | Database           |
 +--------------------+
 | db1                |
 | db2                |
 | information_schema |
 | mysql              |
 | performance_schema |
 | sys                |
 +--------------------+
 # 验证db1和db2数据库的表数据恢复情况
 mysql> select * from db1.student ;
 +----+----------+------+--------+
 | id | name     | age  | gender |
 +----+----------+------+--------+
 | 10 | xiaoming |   20 | M      |
 | 11 | wangwu   |   21 | M      |
 +----+----------+------+--------+
 2 rows in set (0.00 sec)
 ​
 mysql> select * from db2.student2 ;
 +----+---------+------+--------+
 | id | name    | age  | gender |
 +----+---------+------+--------+
 |  1 | wangmaz |   31 | M      |
 +----+---------+------+--------+
 1 row in set (0.00 sec)

补充:备份压缩方法

 # 压缩备份
 mysqldump u账号 -p密码 -S [MySQL的mysql.sock文件] -B [数据库名1] [数据库名2] | gzip > test_B.sql
 # 解压
 gzip -d db1_B.sql.gz

以上就是通过脚本实现分库热备份的方法,注意你们的sock文件存放位置

标签: 暂无
最后更新:2024年10月18日

tanghao946

这个人很懒,什么都没留下

点赞
< 上一篇
下一篇 >

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复
文章目录
  • 热备
  • mysqldump用法
    • 单表备份
    • 数据库备份
    • 通过脚本实现所有数据库的备份

COPYRIGHT © 2025 TH小破站. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

渝ICP备2023013789号

渝公网安备50011702500926号