备份
复制某一表内容
## 复制表
CREATE TABLE 新建的表名
AS
SELECT * FROM 已经存在的表的表名
创建Mysql备份用户
8.0 以下使用命令
##
GRANT SELECT, RELOAD, LOCK TABLES, REPLICATION CLIENT, SHOW VIEW, EVENT, TRIGGER ON *.* TO 'zf_backup'@'localhost' IDENTIFIED BY '123';
## 线上环境不加锁表权限
GRANT SELECT, RELOAD, REPLICATION CLIENT, SHOW VIEW, EVENT, TRIGGER ON *.* TO 'zf_backup'@'localhost' IDENTIFIED BY '123';
Mysql8.0 使用命令
## 删除用户
drop user 'zf_backup'@'%';
## 先创建用户
create user 'zf_backup'@'%' IDENTIFIED BY 'xx-DrKRkIPX';
### 授权
GRANT SELECT,PROCESS,RELOAD,REPLICATION CLIENT,SHOW VIEW,EVENT,TRIGGER ON *.* TO 'zf_backup'@'%';
备份表
##
create table t_salesclue_backup_knight_20211102 select * from t_salesclue;
Mysqldump
1-1: 导出某个库的所有数据以及结构包括存储过程以及视图等
##
mysqldump -uroot -p -h192.168.0.1 -P3306 -q -Q --set-gtid-purged=OFF --default-character-set=utf8 --hex-blob --skip-lock-tables --skip-add-drop-table --no-create-db --databases db_name > db_name.sql
##
mysqldump -uroot -p -h192.168.0.1 -P3306 -q -Q --set-gtid-purged=OFF --hex-blob --skip-lock-tables --skip-add-drop-table --no-create-db --databases db_name > db_name.sql
###
--skip-add-drop-table
每个数据表创建之前添加drop数据表语句。默认为打开状态,使用--skip-add-drop-table取消选项)
--no-create-db, -n
只导出数据,而不添加CREATE DATABASE 语句。
--hex-blob
16进制导出数据,其中未使用--hex-blob参数有可能文件乱码
或者你也可以这样:
##
mysqldump -h 192.168.0.4 -u knight_ro --set-gtid-purged=OFF --skip-lock-tables --hex-blob -p db_name > db_name.sql
##
mysqldump -h 192.168.0.4 -u knight_ro --set-gtid-purged=OFF --hex-blob -p db_name > db_name.sql
--hex-blob: 表示16进制导出blob字段数据,同版本下不加此参数一般不会有什么问题。但在不同版本一定得加好这个参数。
导入:
# 授权
grant all privileges on db_name.* to 'rose'@'%';
mysql -uroot -p -h192.168.0.3 db_name < db_name.sql
1-2: 导出表结构和数据,也会导出视图
mysqldump -h192.168.0.1 -uroot --set-gtid-purged=OFF -p dbname > dbname.sql
1-3: 导入出错的情形
mysql导入的时候如果提示,需要 "super" 权限,这样可能是没有视图权限。你可以去删除掉DEFINE 约束(也就是删除创建view的语句。),一般在mysqldump导出的SQL语句的最后面。
你可以通过vim 或者 sed 把创建视图的权限删除掉。
1-4: 忽略视图导出(暂时没找到方法)
以下指示忽略注释导出
# 忽略视图导出
mysqldump -h 192.168.0.36 -u knight_ro --set-gtid-purged=OFF -p --skip-opt --skip-comments db_xx> db_xx.sql
1-5: 导出数据和存储过程存储过程
# 导出存储过程
mysqldump -h 192.168.0.36 -u knight_ro --set-gtid-purged=OFF -R -p db_xx> db_xx.sql
1-6: 只导出表结构以及触发器不导出数据
## 只导出表结构, 导出的语句有(drop table)需要谨慎
mysqldump -h 10.19.15.196 --opt -d xx-u knight_ro --set-gtid-purged=OFF -p > xx.sql
# 导出数据并触发器
mysqldump -h 10.19.15.196 -u knight_ro -p xx--set-gtid-purged=OFF --triggers > chufaqi.sql
# 导出数据并导出存储过程和函数
mysqldump -h 10.19.19.251 -u knight_ro --set-gtid-purged=OFF -R -p xx > xx.sql
# 导出数据并导出存储和函数以及触发器
mysqldump -h 10.19.19.251 -u knight_ro --set-gtid-purged=OFF --triggers -R -p xx> xx.sql
1-7 导出多张表的表结构以及数据
mysqldump -hlocalhost -uroot -p db_edu --tables polls_book polls_choice --set-gtid-purged=off >polls_book.sql
Msyqldump导出后的语句示例
导出的语句有drop table以及insert 语句
-- MySQL dump 10.13 Distrib 5.7.30, for Linux (x86_64)
--
-- Host: localhost Database: db_edu
-- ------------------------------------------------------
-- Server version 5.7.30
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
-- Table structure for table `polls_book`
--
DROP TABLE IF EXISTS `polls_book`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `polls_book` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`title` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=25 DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `polls_book`
--
LOCK TABLES `polls_book` WRITE;
/*!40000 ALTER TABLE `polls_book` DISABLE KEYS */;
INSERT INTO `polls_book` VALUES (1,'python'),(24,'yy');
/*!40000 ALTER TABLE `polls_book` ENABLE KEYS */;
UNLOCK TABLES;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-- Dump completed on 2021-11-03 13:56:37
腾讯云Mysql数据导出
导出指定表结构和数据:
##
mysqldump -h172.16.32.19 -P3306 -uroot -pxxxxxx --default-character-set=utf8 --skip-opt --lock-tables=false --add-drop-table --create-options --quick --extended-insert --complete-insert --set-charset --disable-keys --set-gtid-purged=OFF --single-transaction --skip-tz-utc ecoflow_production_test --tables xx_test_record > xx_test_record.sql
(2)DTS迁移
# 隔离级别参数
tx_isolation
Mysqldump 参数分析
- --lock-tables
它和 --lock-all-tables 类似,不过是锁定当前导出的数据表,而不是一下子锁定全部库下的表。本选项只适用于 MyISAM 表,如果是 Innodb 表可以用 --single-transaction 选项
- --single-transaction
该选项在导出数据之前提交一个 BEGIN SQL语句,BEGIN 不会阻塞任何应用程序且能保证导出时数据库的一致性状态。它只适用于事务表,例如 InnoDB 和 BDB。本选项和 --lock-tables 选项是互斥的,因为 LOCK TABLES 会使任何挂起的事务隐含提交。要想导出大表的话,应结合使用 --quick 选项。
还原
## 还原
mysql -u root -p db_name < backup.sql