Mysql 備份和恢復.sql文件,導入.csv文件


數據備份和恢復

參考:http://www.mysqltutorial.org/mysql-copy-database/ 

參考:http://www.mysqltutorial.org/how-to-backup-database-using-mysqldump.aspx  mysqldump命令的詳細介紹,包括參數的使用。

 

2020-03-08補充

導出純文本格式數據:

mysql -u root -p -e 'select * from linshi.employee' > employee.sql

 

另外還可以使用into outfile 命令。但需要設置一下secure_file_priv參數。

 

備份數據庫

mysqldump -u root -p 數據庫名 > 路徑/xxx.sql   

⚠️>代表export

恢復數據庫/導入數據庫

  • 連接mysql,創建新的數據庫
  • 退出連接,執行如下命令:  mysql -uroot -p 新數據庫名 < 路徑/xxx.sql;   ⚠️< 代表import,
  • 或者進入控制台,在一個數據庫內使用命令:source 路徑/xxx.sql

⚠️導入一個下載的xx.sql,到你的本地,先打開這個文件看一下,文件頭幾行代碼,比如:

CREATE DATABASE /*!32312 IF NOT EXISTS*/`classicmodels` /*!40100 DEFAULT CHARACTER SET latin1 */;

USE `classicmodels`;

 

那么進入控制台后,使用source命令,把文件拖拉到zsh控制台,會自動得到路徑,然后敲擊回車即可。

 

另一種備份+恢復的方法,更高效!

使用--databases參數:

  1. mysqldump -u root -p --databases 數據庫名 > 路徑/xxx.sql 
  2. 原數據庫數據丟失/損壞,刪除原數據庫。
  3. mysql -u root -p < 路徑/xxx.sql 或者在控制台內使用source命令。

--databases參數的作用其實是增加了2行代碼到xxx.sql中:

  1. create database xxx;
  2. use xxx;

 

最后查看使用:

show tables from 新的數據庫名 


 

導入csv文件

https://dev.mysql.com/doc/refman/8.0/en/load-data.html

第一步:建表

create table orderinfo(
orderid int primary key not null ,
userid int,
isPaid varchar(10),
price float,
paidTime varchar(30));


create table userinfo(
userid int primary key,
sex varchar(10),
birth date);


第二步:導數

load data local infile '路徑/xxx.csv' into table orderinfo fields terminated by ',';
load data local infile '路徑/user_info_utf.csv' into table userinfo fields terminated by ',';

⚠️
a、語句要正確
b、路徑不要有中文,是左斜桿,
c、mysql 8.0 導入會報錯

The used command is not allowed with this MySQL version。

這是因為安全需要,對於mysql client, 默認為禁止加載本地數據。
解決辦法參考了:stackoverflow

SHOW VARIABLES LIKE 'local_infile'; SET GLOBAL local_infile = 1;

d, local關鍵字,當被指定后,會從在客戶端主機的client program讀文件並發送到server。

⚠️: 要有fields terminated by ',' 是因為csv 文件是以逗號為分割符的

 

第三步:對 orderinfo 表的日期數據進行規整

a、先把時間格式標准化變成 1993-02-27 。

update orderinfo set paidtime=replace(paidtime,'/','-') where paidtime is not null;


b、然后更新字符串為日期格式,然后才能使用日期函數進行操作,

update orderinfo set paidtime=str_to_date(paidtime,'%Y-%m-%d %H:%i') where paidtime is not null;

⚠️如果報 function str_to_datetime_value 錯誤,可以用 select * from orderinfo where paidtime='\r' limit 10; 來看一下是否包含了 \r 符號,
如果是包含了,則用下面語句再過濾掉

update orderinfo set paidtime=str_to_date(paidtime,'%Y-%m-%d %H:%i') where paidtime is not null and paidtime <>'\r';

 

❌MYSQL導入數據出現

The MySQL server is running with the --secure-file-priv option so it cannot execute this
  • a.解決辦法:https://blog.csdn.net/gb4215287/article/details/79762020
  • b.把數據放到secure-file-priv

 

附帶語句:

# 清除表全部數據命令
truncate userinfo;
相當於drop table userinfo后再create table userinfo(column...), 速度比delete from table更快。

 

MySQL 日期時間 Extract(選取) 函數

1. 選取日期時間的各個部分:日期、時間、年、季度、月、日、小時、分鍾、秒、微秒

set @dt = '2008-09-10 07:15:30.123456';
select date(@dt); -- 2008-09-10
select time(@dt); -- 07:15:30.123456
select year(@dt); -- 2008
select quarter(@dt); -- 3
select month(@dt); -- 9
select week(@dt); -- 36
select day(@dt); -- 10
select hour(@dt); -- 7
select minute(@dt); -- 15
select second(@dt); -- 30
select microsecond(@dt); -- 123456

2. date_add()函數

mysql> select date_add("2017-06-15",INTERVAL 10 DAY); +----------------------------------------+
| date_add("2017-06-15",INTERVAL 10 DAY) |
+----------------------------------------+
| 2017-06-25                             |
+----------------------------------------+

 


 

\r符號,\n, 回車和換行的區別

https://www.cnblogs.com/xiaotiannet/p/3510586.html

回車: Carriage Return,

換行:Line Feed。Feed line into the computer,把一行字符輸入到計算機中。

 

符號        ASCII碼        意義

\n               10          換行

\r                13          回車CR

 

在計算機還沒有出現之前,有一種叫做電傳打字機(Teletype Model 33,Linux/Unix下的tty概念也來自於此)的玩意,每秒鍾可以打10個字符。但是它有一個問題,就是打完一行換行的時候,要用去0.2秒,正好可以打兩個字符。要是在這0.2秒里面,又有新的字符傳過來,那么這個字符將丟失。

於是,研制人員想了個辦法解決這個問題,就是在每行后面加兩個表示結束的字符。一個叫做“回車”,告訴打字機把打印頭定位在左邊界;另一個叫做“換行”,告訴打字機把紙向下移一行。這就是“換行”和“回車”的來歷,從它們的英語名字上也可以看出一二。

后來,計算機發明了,這兩個概念也就被般到了計算機上。那時,存儲器很貴,一些科學家認為在每行結尾加兩個字符太浪費了,加一個就可以。於是,就出現了分歧。

在Windows中:

  • '\r' 回車,回到當前行的行首,而不會換到下一行,如果接着輸出的話,本行以前的內容會被逐一覆蓋;
  • '\n' 換行,換到當前位置的下一行,而不會回到行首;

Unix系統里,每行結尾只有“<換行>”,即"\n";

Windows系統里面,每行結尾是“<回車><換行>”,即“\r\n”;

Mac系統里,每行結尾是“<回車>”,即"\r";。

一個直接后果是,Unix/Mac系統下的文件在Windows里打開的話,所有文字會變成一行;而Windows里的文件在Unix/Mac下打開的話,在每行的結尾可能會多出一個^M符號。


免責聲明!

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



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