首页 > 数据库 > MySQL > 正文

Mysql导出文件及备份操作笔记

2024-07-24 12:34:55
字体:
来源:转载
供稿:网友

  通过 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。
 
  如下语句将 test 数据库的 sheet1 表导出到 /tmp 目录下,执行后在 /tmp 目录下回生成 sheet1.txt 文本文件:
 
  [root@bogon ~]# mysqldump -u root -p --no-create-info  --tab=/tmp test sheet1
 
  Enter password:
 
  [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 就可以了。

(编辑:武林网)

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表