導出mysql數據庫數據


1.phpmyadmin導出

SELECT `a`.`order_sn`,`a`.`member_id`,`c`.`job_number`,`a`.`shouhuo_name`,`a`.`shouhuo_moblie`,`a`.`shouhuo_tel` FROM ( SELECT * FROM `newerp_jifen_order` WHERE `shouhuo_time` > 0 AND `fahuo_time` > 0 AND `business_id` = 27 AND `add_time` > 1537804800 AND `shipping_status` = 3 ) AS `a` 
LEFT JOIN ( SELECT * FROM `newerp_jifen_order_log` WHERE `content` = '客戶確認收貨' GROUP BY `order_id` ) `b` ON ( `a`.`order_id` = `b`.`order_id` )
JOIN `newerp_member` AS `c` ON (`a`.`member_id` = `c`.`id`) WHERE `b`.`order_id` IS NULL

以上只是一個示例,發現在phpmyadmin里面不能導出SQL (insert)

原因:原來在phpmyadmin里面只能導出類似單表的SQL(insert)的文件。

解決方案:在查詢外面套用一個統一臨時查詢 SELECT 

SELECT `t`.* FROM ( 

  SELECT `a`.`order_sn`,`a`.`member_id`,`c`.`job_number`,`a`.`shouhuo_name`,`a`.`shouhuo_moblie`,`a`.`shouhuo_tel` FROM ( SELECT * FROM `newerp_jifen_order` WHERE `shouhuo_time` > 0 AND `fahuo_time` > 0 AND `business_id` = 27 AND `add_time` > 1537804800 AND `shipping_status` = 3 ) AS `a`
  LEFT JOIN ( SELECT * FROM `newerp_jifen_order_log` WHERE `content` = '客戶確認收貨' GROUP BY `order_id` ) `b` ON ( `a`.`order_id` = `b`.`order_id` )
  JOIN `newerp_member` AS `c` ON (`a`.`member_id` = `c`.`id`) WHERE `b`.`order_id` IS NULL

) AS `t`

這樣就可以導出:

導出之后,放入本地Navicat for MySQL工具中運行SQL,最終導出到Excel,最后發現Excel一些長的數字字符串會被轉換為科學記數法,而且還是在后面補0,導致一些長數字字符串錯誤

解決方案:

SELECT CONCAT("'",`order_sn`) as `order_sn`,`member_id`,`job_number`,`shouhuo_name`,`shouhuo_moblie`,`shouhuo_tel` FROM `t`

2. 直接mysqldump

一.MYSQL的命令行模式的設置:
桌面->我的電腦->屬性->環境變量->新建->
PATH=“;path\mysql\bin;”其中path為MYSQL的安裝路徑。
二.簡單的介紹一下命令行進入MYSQL的方法:
1.C:\>mysql -h hostname -u username -p  .C:\>mysql -h localhost -u root-p
按ENTER鍵,等待然后輸入密碼。這里hostname為服務器的名稱,如localhost,username為MYSQL的用戶名,如root。
進入命令行后可以直接操作MYSQL了。
2.簡單介紹一下MYSQL命令:
  mysql->CREATE DATABASE dbname;//創建數據庫
  mysql->CREATE TABLE tablename;//創建表
  mysql->SHOW DATABASES;//顯示數據庫信息,有那些可用的數據庫。
  mysql->USE dbname;//選擇數據庫
  mysql->SHOW TABLES;//顯示表信息,有那些可用的表
  mysql->DESCRIBE tablename;//顯示創建的表的信息
三.從數據庫導出數據庫文件:
1.將數據庫mydb導出到e:\mysql\mydb.sql文件中:
打開開始->運行->輸入cmd 進入命令行模式
c:\>mysqldump -h localhost -u root -p mydb >e:\mysql\mydb.sql
然后輸入密碼,等待一會導出就成功了,可以到目標文件中檢查是否成功。
2.將數據庫mydb中的mytable導出到e:\mysql\mytable.sql文件中:
c:\>mysqldump -h localhost -u root -p mydb mytable>e:\mysql\mytable.sql
3.將數據庫mydb的結構導出到e:\mysql\mydb_stru.sql文件中:
c:\>mysqldump -h localhost -u root -p mydb --add-drop-table >e:\mysql\mydb_stru.sql
四.從外部文件導入數據到數據庫中:
從e:\mysql\mydb2.sql中將文件中的SQL語句導入數據庫中:
1.從命令行進入mysql,然后用命令CREATE DATABASE mydb2;創建數據庫mydb2。
2.退出mysql 可以輸入命令exit;或者quit;
3.在CMD中輸入下列命令:
c:\>mysql -h localhost -u root -p mydb2 < e:\mysql\mydb2.sql
然后輸入密碼,就OK了。

3.根據查詢結果導出數據庫數據

引言

最近在修改線上數據的時候,需要現將修改的數據繼續備份,但是線上客戶的服務器是不能直接連接,而是通過了一台堡壘機,這就說我們不能通過可視化客戶端直接連接mysql的,所以所有的操作都是需要通過sql語句的,下面看一下導出的sql:

mysql> select count(1) from table  into outfile '/tmp/test.xls';

直接在我們查詢的結果后面增加 into outfile '路徑即可',但是在開始的時候我后面添加的路徑不是 /tmp 而是/data 這樣執行以后拋出下面的錯誤:

The MySQL server is running with the --secure-file-priv option so it cannot execute this statement

這是因為mysql設置的權限,我們可以通過下面sql查看一下權限設置:

show variables like '%secure%';

導出的數據必須是這個值的指定路徑才可以導出,默認有可能是NULL就代表禁止導出,所以需要設置一下;

我們需要在/etc/mysql/mysql.conf.d/mysqld.cnf 文件的末尾進行設置,在末尾添加一句secure_file_priv="/"即可將數據導出到任意目錄;

secure_file_priv

  1、限制mysqld 不允許導入 | 導出

    secure_file_prive=null

  2、限制mysqld 的導入 | 導出 只能發生在/tmp/目錄下

   secure_file_priv=/tmp/

  3、不對mysqld 的導入 | 導出做限制

          secure_file_priv 

       4、可以導出至任意目錄

            secure_file_priv="/"

這樣設置以后我們就可以,實現我們一些自定義的的導出了!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM