通过
SELECT … INTO OUTFILE 语句
导出某个表
MariaDB [(none)]> show databases;
+——————–+
| Database |
+——————–+
| acs |
| auth |
| information_schema |
| mysql |
| performance_schema |
| test |
+——————–+
6 rows in set (0.01 sec)
MariaDB [(none)]> use test
Database changed
MariaDB [test]> show tables;
+—————-+
| Tables_in_test |
+—————-+
| sheet1 |
+—————-+
1 row in set (0.01 sec)
MariaDB [test]> select * from sheet1 into outfile '/tmp/sheet1.txt';
Query OK, 239 rows affected (0.02 sec)
MariaDB [test]> select * from sheet1 into outfile '/tmp/sheet2.txt'
-> FIELDS TERMINATED BY ',' ENCLOSED BY '"'
-> LINES TERMINATED BY '\r\n';
Query OK, 239 rows affected (0.00 sec)
LOAD DATA INFILE是SELECT … INTO OUTFILE的逆操作,SELECT句法。为了将一个数据库的数据写入一个文件,使用SELECT … INTO OUTFILE,为了将文件读回数据库,使用LOAD DATA INFILE。
通过
mysqldump
导出表作为原始数据
如下语句将
test
数据库的
sheet1
表导出到
/tmp
目录下,执行后在
/tmp
目录下回生成
sheet1.txt
文本文件:
[root@bogon ~]# mysqldump -u root -p –no-create-info –tab=/tmp test sheet1
Enter password:
通过
mysqldump
导出某个表定义及数据
[root@bogon ~]# mysqldump -u root -p test sheet1 > /tmp/sheet1dump.txt
Enter password:
[root@bogon ~]#
[root@bogon tmp]# more sheet1dump.txt
— MySQL dump 10.16 Distrib 10.1.25-MariaDB, for Linux (x86_64)
—
— Host: localhost Database: test
— ——————————————————
— Server version 10.1.25-MariaDB
—
— Table structure for table `sheet1`
—
DROP TABLE IF EXISTS `sheet1`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `sheet1` (
`Code` varchar(255) DEFAULT NULL,
`Name` varchar(255) DEFAULT NULL,
`Continent` varchar(255) DEFAULT NULL,
…
`Code2` varchar(255) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;
—
— Dumping data for table `sheet1`
—
LOCK TABLES `sheet1` WRITE;
/*!40000 ALTER TABLE `sheet1` DISABLE KEYS */;
INSERT INTO `sheet1` VALUES ('ABW','Aruba','North America','Caribbean','193.00','','103000','78.4','828.00','793.00','Aruba','
….
8670.00','Zimbabwe','Republic','Robert G. Mugabe','4068','ZW');
/*!40000 ALTER TABLE `sheet1` ENABLE KEYS */;
UNLOCK TABLES;
— Dump completed on 2020-03-27 18:04:43
全库备份:
[root@bogon ~]# mysqldump -u root -p –all-databases > /home/dbbakups/Test_DB_dump20200327.txt
Enter password:
将数据表及数据库拷贝至其他主机
如果你需要将数据拷贝至其他的 MySQL 服务器上, 你可以在 mysqldump 命令中指定数据库名及数据表。
在源主机上执行以下命令,将数据备份至 dump.txt 文件中:
$ mysqldump -u root -p database_name table_name > dump.txt
password *****
[root@bogon ~]# mysqldump -u root -p test sheet1 > /tmp/sheet1dump.txt
如果完整备份数据库,则无需使用特定的表名称。
[root@bogon ~]# mysqldump -u root -p acs > /tmp/acsdump.txt
[root@bogon tmp]# ls -alh
-rw-r–r–. 1 root root 5.2M Mar 27 18:54 acsdump.txt
如果你需要将备份的数据库导入到MySQL服务器中,可以使用以下命令,使用以下命令你需要确认数据库已经创建:
创建数据库
语法
:
create
database
db1
DEFAULT
CHARSET
utf8
COLLATE
utf8_general_ci;
# utf8编码
create database db1 DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci; # gbk编码
使用数据库:
use
db1;
在另一个本地PC上创建名称为acstest的数据库:
mysql> create database acstest DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
Query OK, 1 row affected, 2 warnings (0.09 sec)
mysql> show databases;
+——————–+
| Database |
+——————–+
| acstest |
| information_schema |
| kuqlan |
| mysql |
| performance_schema |
| sakila |
| sys |
| world |
+——————–+
8 rows in set (0.00 sec)
mysql> exit
Bye
C:\Users\yspmm>mysql -u root -p acstest < D:\acsdump.txt
Enter password: ********
导入语法:
$ mysql -u root -p database_name < dump.txt
password *****
你也可以使用以下命令将导出的数据直接导入到远程的服务器上,但请确保两台服务器是相通的,是可以相互访问的:
$ mysqldump -u root -p database_name \
| mysql -h other-host.com database_name
将指定主机的数据库拷贝到本地
如果你需要将远程服务器的数据拷贝到本地,你也可以在 mysqldump 命令中指定远程服务器的IP、端口及数据库名。
在源主机上执行以下命令,将数据备份到 dump.txt 文件中:
请确保两台服务器是相通的:
mysqldump
–
h other
–
host
.
com
–
P port
–
u root
–
p database_name
>
dump
.
txt
password
****
一般在导出文件目录没有在
mysql
参数文件
my
.ini
或
my
.cnf
里进行配置会出现如下错误:
The MySQL server is running with the –secure-file-priv option so it cannot execute this statement
出现这个错误是因为没有给数据库指定写出文件的路径或者写出的路径有问题。错误解决方法:
首先使用下面的命令
show variables like '%secure%';
查看数据库的存储路径。如果查出的 secure_file_priv 是 null 的时候就证明在 my.ini 文件里面没有配置写出路径。
这时候就可以在 mysql.ini 文件的 [mysqld] 代码下增加 secure_file_priv=
D
:/
tmp
再重启 mysql 就可以了。
参考文章:
https://www.runoob.com/mysql/mysql-database-export.html