django migrate沖突與常用mysql命令

django migrate 沖突解決

沖突起因, makemigrations 記錄sql的變化, migrate執(zhí)行,多人協(xié)作或一不留神,常常造成沖突。

  • 解決makemigrations對應(yīng)沖突的腳本
  • 增量修改表結(jié)構(gòu)
mysql 常用命令

mysql 導(dǎo)入導(dǎo)出的命令。

使用mysqldump命令
mysqldump 是命令行工具,主要用于mysql備份和還原數(shù)據(jù)。這個命令使用起來方便,直接在終端執(zhí)行。

Dumping structure and contents of MySQL databases and tables.
Usage: mysqldump [OPTIONS] database [tables]
OR mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...]
OR mysqldump [OPTIONS] --all-databases [OPTIONS]

mysqldump 的主要參數(shù):

-h, --host=ip 主機(jī)地址
-u, --user=name 登錄用戶名
-P, --port=# Mysql連接端口
-p, --password[=name] Mysql密碼。如果不給定值,直接回車,會提示輸入密碼
-d, --no-data 不包含行信息,只導(dǎo)出表結(jié)構(gòu)

這些命令都不用刻意去記,執(zhí)行 mysqldump --help , 就可以查詢使用幫助。

導(dǎo)出整個表(包含數(shù)據(jù))
mysqldump -u 用戶名 -p [密碼] 數(shù)據(jù)庫名 > 導(dǎo)出的文件名
導(dǎo)出表

包含數(shù)據(jù)

mysqldump -u 用戶名 -p 數(shù)據(jù)庫名 表名 > 導(dǎo)出的文件名

只導(dǎo)出表結(jié)構(gòu)

mysqldump -u 用戶名 -d -p 數(shù)據(jù)庫名 表名 > 導(dǎo)出的文件名

導(dǎo)入到遠(yuǎn)程服務(wù)器
使用管道命令,還可以將導(dǎo)出的數(shù)據(jù)直接導(dǎo)入到遠(yuǎn)程的服務(wù)器上,前提是服務(wù)器可以相互訪問。

mysqldump -u 用戶名 -p 數(shù)據(jù)庫名 | mysql -h 遠(yuǎn)程服務(wù)器HOST 遠(yuǎn)程數(shù)據(jù)庫名
SQL文件壓縮備份&還原
mysqldump -u 用戶名 -d -p 數(shù)據(jù)庫名 | gzip > 文件名.sql.gz

gunzip < 文件名.sql.gz | mysql -u 用戶名 -p 數(shù)據(jù)庫
示例SQL

create database test;
use test;

create table tb1(
f1 int auto_increment,
f2 varchar(50),
primary key(f1)
)ENGINE= INNODB default charset = utf8;

insert into tb1 values(null, 'a');
insert into tb1 values(null, 'b');
insert into tb1 values(null, 'c');
insert into tb1 values(null, 'd');

create table tb2(
t1 int auto_increment,
t2 varchar(50),
primary key(t1)
)ENGINE= INNODB default charset = utf8;

insert into tb2 values(null, 'a');
insert into tb2 values(null, 'b');
insert into tb2 values(null, 'c');
insert into tb2 values(null, 'd');

select * from tb1;
select * from tb2;
mysqldump -uhomestead -p testdb > test_ddl.sql
mysqldump -uhomestead -p test tb1 > ~/Code/tmp/db1_ddl.sql
mysqldump -uhomestead -p test -d tb1 > ~/Code/tmp/db1_ddl.sql

mysqldump -uhomestead -d -p test | gzip > backup-file.sql.gz
gunzip < backup-file.sql.gz | mysql -uhomestead -p test
使用source 命令
可以在mysql控制臺里,加載執(zhí)行SQL文件。

登入Mysql

mysql -u root -p

mysql> set names utf8; (防止亂碼,先設(shè)置字符集)
mysql> use test;
mysql> source ~/Code/tmp/db1_ddl.sql
使用into outfile 和 load data infile命令
有時候,我們需要根據(jù)查詢條件導(dǎo)出SQL,可以使用mysql語句:into outfile 和 load data infile。

同source命令, 都需要先登入mysql。

導(dǎo)出

select * from tb1 into outfile '/var/lib/mysql-files/outfile1' fields terminated by '|' enclosed by '"' lines terminated by '\r\n' ;
導(dǎo)入

load data infile "/var/lib/mysql-files/outfile1" replace into table tb1 fields terminated by '|' enclosed by '"' lines terminated by '\r\n' ;
用這兩條命令還是有注意事項:

分隔符參數(shù)

fields關(guān)鍵字指定了文件記段的分割格式,如果用到這個關(guān)鍵字,MySQL剖析器希望看到至少有下面的一個選項:

terminated by 分隔符:意思是以什么字符作為分隔符
enclosed by 字段括起字符
escaped by 轉(zhuǎn)義字符
terminated by 描述字段的分隔符,默認(rèn)情況下是tab字符( )
enclosed by 描述的是字段的括起字符。
escaped by 描述的轉(zhuǎn)義字符。默認(rèn)的是反斜杠(backslash: )
字符集設(shè)置

load data infile '/var/lib/mysql-files/outfile1' replace into table tb1 character set utf8 fields terminated by '|' enclosed by '"' lines terminated by '\r\n' ;
目錄限制

mysqld 的secure_file_priv配置 ,用來限制LOAD_FILE()和LOAD DATA和SELECT … ,INTO OUTFILE報表到指定的目錄。

導(dǎo)入導(dǎo)出一定是在設(shè)定的目錄文件,否則會報錯:ERROR 1290 (HY000):The MySQL server is running with the --secure-file-priv option so it cannot execute this statement

查看配置

SELECT @@secure_file_priv;

常用參數(shù)
-A, --all-databases
導(dǎo)出所有數(shù)據(jù)庫
--add-drop-database
在創(chuàng)建數(shù)據(jù)庫之前先DROP數(shù)據(jù)庫
--add-drop-table
在創(chuàng)建表之前先drop表,默認(rèn)true
--add-locks
在insert語句前加鎖,默認(rèn)true
--compact
導(dǎo)出更少的輸出信息(用于調(diào)試)。去掉注釋和頭尾等結(jié)構(gòu)
-c, --complete-insert
使用完整的insert語句(包含列名稱)。
-B, --databases
導(dǎo)出幾個數(shù)據(jù)庫。參數(shù)后面所有名字參量都被看作數(shù)據(jù)庫名。導(dǎo)出文件中會有'USE db_name;'
--default-character-set=name
設(shè)置默認(rèn)字符集
-e, --extended-insert
使用具有多個VALUES列的INSERT語法。這樣使導(dǎo)出文件更小,并加速導(dǎo)入時的速度,默認(rèn)true
**--ignore-table=name **
忽略指定的表不導(dǎo)出
--insert-ignore
在插入行時使用insert ignore
-l, --lock-tables
開始導(dǎo)出前,鎖定所有表
--dump-slave
將主庫的binlog位置和文件名追加到導(dǎo)出數(shù)據(jù)的文件中,該參數(shù)在在從服務(wù)器上執(zhí)行,相當(dāng)于執(zhí)行show slave status.當(dāng)設(shè)置為1時,將會以CHANGE MASTER命令輸出到數(shù)據(jù)文件;設(shè)置為2時,會在change前加上注釋。
--master-data[=#]
該選項將當(dāng)前服務(wù)器的binlog的位置和文件名追加到輸出文件中(show master status)。如果為1,將會輸出CHANGE MASTER 命令;如果為2,輸出的CHANGE MASTER命令前添加注釋信息。
-n, --no-create-db
只導(dǎo)出數(shù)據(jù),不添加create database語句,默認(rèn)false
-t, --no-create-info
只導(dǎo)出數(shù)據(jù),不添加create table語句,默認(rèn)false
-d, --no-data
不導(dǎo)出任何數(shù)據(jù),只導(dǎo)出數(shù)據(jù)庫表結(jié)構(gòu)
-q, --quick
不緩沖查詢,直接導(dǎo)出到標(biāo)準(zhǔn)輸出。默認(rèn)true
**--replace **
插入數(shù)據(jù)時用replace
--set-gtid-purged[=name]
是否添加SET@@GLOBAL.GTID_PURGED,默認(rèn)auto
--single-transaction
使用一致性的快照來導(dǎo)出數(shù)據(jù),不鎖表,默認(rèn)false
--tables
覆蓋--databases (-B)參數(shù),指定需要導(dǎo)出的表名
-w, --where=name
按照條件導(dǎo)出,只能導(dǎo)出單個表
-u -h -P -p
用戶名,主機(jī)名,端口,密碼

常用方法
1、導(dǎo)出所有庫
mysqldump -uroot -p123 --single-transaction --all-databases >all.sql
該命令會導(dǎo)出包括系統(tǒng)數(shù)據(jù)庫在內(nèi)的所有數(shù)據(jù)庫
2、導(dǎo)出單個庫
mysqldump -uroot -p123 --single-transaction test > test.sql
3、導(dǎo)出多個數(shù)據(jù)庫
mysqldump -uroot -p123 --single-transaction --databases db1 db2> db.sql
導(dǎo)出文件中會有'USE db1;USE db2'
4、導(dǎo)出單表
mysqldump -uroot -p123 --single-transaction test table_1 > table_1.sql
5、導(dǎo)出多表
mysqldump -uroot -p123 --single-transaction test --tables table_1 table_2> table.sql
6、只導(dǎo)表結(jié)構(gòu)
mysqldump -uroot -p123 --single-transaction test -d > test_structure.sql
7、只導(dǎo)出數(shù)據(jù)
mysqldump -uroot -p123 --no-create-info --single-transaction --skip-add-locks --compact -c --set-gtid-purged=OFF test t2 >t2.sql
8、按照where條件導(dǎo)出
mysqldump -uroot -p123 --single-transaction test table_1 -w "id<1000000" > table_1.sql

  • 增加一張表
CREATE TABLE `table_name`(
  ...
  )ENGINE=InnoDB DEFAULT CHARSET=utf8;

  • 增加記錄
INSERT INTO `your_table_name`(`column_name`)
VALUES
('your_value_one'),
('your_value_two');

  • 增加字段
ALTER TABLE `your_table_name`
ADD `your_column_name` ...
AFTER `column_name`;

  • 增加索引

    • 主鍵
    ALTER TABLE `your_table_name`
    ADD PRIMARY KEY your_index_name(your_column_name);
    
    
    • 唯一索引
    ALTER TABLE `your_table_name`
    ADD UNIQUE your_index_name(your_column_name);
    
    
    • 普通索引
    ALTER TABLE `your_table_name`
    ADD INDEX your_index_name(your_column_name);
    
    
    • 全文索引
    ALTER TABLE `your_table_name`
    ADD FULLTEXT your_index_name(your_column_name);
    
    
  • 逐行刪除
DELETE FORM `table_name`
WHERE ...;

  • 清空整張表
TRUNCATE TABLE `your_table_name`;

  • 刪除表
DROP TABLE `your_table_name`;

  • 刪除字段
ALTER TABLE `your_table_name`
DROP `column_name`;

  • 刪除索引
ALTER TABLE `your_table_name`
DROP INDEX your_index_name(your_column_name);

  • 變更數(shù)據(jù)
UPDATE `table_name`
SET column_name=your_value
WHERE ...;

  • 變更字段
ALTER TABLE `your_table_name`
CHANGE `your_column_name` `your_column_name` ...(變更);

  • 變更字段值為另一張表的某個值
UPDATE `your_table_name`
AS a
JOIN `your_anther_table_name`
AS b
SET a.column = b.anther_column
WHERE a.id = b.a_id...;

  • 普通查詢
SELECT `column_name_one`, `column_name_two`
FROM `table_name`;

  • 關(guān)聯(lián)查詢
SELECT *
FROM `your_table_name`
AS a
JOIN `your_anther_table_name`
AS b
WHERE a.column_name = b.column_name...;

  • 合計函數(shù)條件查詢:WHERE 關(guān)鍵字無法與合計函數(shù)一起使用
SELECT aggregate_function(column_name)
FROM your_table_name
GROUP BY column_name
HAVING aggregate_function(column_name)...;

  • 同一個實例下跨庫查詢
SELECT *
FROM database_name.your_table_name
AS a
JOIN another_database_name.your_another_table_name
AS b
WHERE a.column_name = b.column_name...;

  1. 復(fù)制一張表結(jié)構(gòu)
CREATE TABLE `your_table_name`
LIKE `destination_table_name`;

  1. 完全復(fù)制一張表:表結(jié)構(gòu)+全部數(shù)據(jù)
CREATE TABLE `your_table_name`
LIKE `destination_table_name`;

INSERT INTO `your_table_name`
SELECT *
FROM `destination_table_name`;


附錄:mysql常用命令

  • 登陸: mysql -h host -u username -p
  • 列出數(shù)據(jù)庫:SHOW DATABESES;
  • 列出表:SHOW TABLES;
  • 列出表結(jié)構(gòu):DESC table_name
  • 使用一個數(shù)據(jù)庫:USE database_name;
  • 導(dǎo)入:source 'file';
  • 導(dǎo)出:mysqldump -h 127.0.0.1 -u root -p "database_name" "table_name" --where="condition" > file_name.sql;
  • 查看慢日志:mysqldumpslow -s [c:按記錄次數(shù)排序/t:時間/l:鎖定時間/r:返回的記錄數(shù)] -t [n:前n條數(shù)據(jù)] -g "正則" /path
  • 新增用戶: insert into user(Host, User, authentication_string) value('localhost', 'username', password('pwd'))

mysql 5.7 新增用戶

// 插入新用戶
insert into mysql.user(Host, User, authentication_string, ssl_cipher, x509_issuer, x509_subject
value('localhost', 'username', password('password'), '', '', '');

// 數(shù)據(jù)庫授權(quán)
grant all privileges on dbname.name.* to username@localhost identified by 'password';

// 刷新權(quán)限信息
FLUSH PRIVILEGES;

寫得不錯的:
http://www.lxweimin.com/p/590ca53f58c6

http://www.lxweimin.com/p/a7e370144ca1

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,363評論 6 532
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,497評論 3 416
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,305評論 0 374
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,962評論 1 311
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 71,727評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,193評論 1 324
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,257評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,411評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,945評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 40,777評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,978評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,519評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,216評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,642評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,878評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,657評論 3 391
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 47,960評論 2 373

推薦閱讀更多精彩內(nèi)容