一、逻辑备份
1、使用mysqldump命令备份
mysqldump是mysql数据库非常有用的备份命令,可以将数据库备份成一个文本文件。里边是create和insert语句,使用这些语句可以重新创建表和数据。语法格式如下:
mysqldump -u user -h host -p passwd dbname [tabname,tabname..] > filename.sql
(1)、使用mysqldump备份单个数据库的所有表
mysqldump -u root -p test > /home/backup/test.sql
(2)、使用mysqldump备份某个库中的单个表
mysqldump -u root -p test t_count > /home/backup/t_count.sql
(3)、使用mysql备份多个数据库
mysql -u root -p --database test test1 > /home/backup/test_test1.sql # 备份多个库
mysql -u root -p --all-database > /home/backup/all.sql # 备份所有数据库
2、mysqldump命令的常用参数解释
-A 备份所有数据库,不备份information_schema performance_schema和sysz这是mysql自己进行维护的 mysqldump -u root -p111111 -A > all.sql
--add-drop-database 在创建库之前先执行删库操作
--add-drop-table 在建表之前先执行删表操作 如果默认开启了该参数,可以用--skip-add-drop-table来使它不生效
--add-drop-trigger 在建立触发器之前先执行删除操作
--add-locks 在执行insert语句之前添加锁
--compact 用来减少冗长的输出,实用于调试
-B --databases 用于备份多个数据库,在导出的SQL中会添加 use dbname;
--default-character-set 设置默认字符集
-F --fulsh-logs 备份前刷新服务器的日志文件,备份多个库为每个备份的库都刷新
-x, --lock-all-tables 锁定所有库的所有表
-l --lock-tables 锁定所有表,只允许读操作
--master-data 将二进制日志信息写到备份文件中,值为1写入,值为2写入之后处于被注释掉的状态
-t 只备份数据
-d 只备份表结构
--single-transaction 在InnoDB引擎中使用,在一个事务里备份所有表
3、分库备份,将MySQL里的所有库进行备份,一个库单独生成一个文件,可以通过shell脚本写for循环来实现。也可以用shell命令完成
二、物理备份
1、mysql的存储为文件方式,所有可以直接数据库的存储目录及数据文件进行备份。这是一种简单有效的备份方式,要保持备份的一致性。备份前需要对相关别哦执行LOCK TABLES操作,然后对表执行FLUSH TABLES操作。这样在复制文件时,允许其它客户继续查询表。flush语句确保备份前将所有激活的索引页写入硬盘。这种方法对于InnoDB引擎不适用,如果使用不能版本的数据库也可能不兼容。
三、数据恢复
1、mysql -u user -p passwd dbname < dbname.sql 通过该命令对丢失的数据进行恢复
2、也可以登陆到mysql数据库的命令行界面,执行 source dbname.sql
3、如果是物理恢复,直接拷贝数据库的文件到data文件夹下即可