django migrate冲突与常用mysql命令

django migrate 冲突解决

冲突起因, makemigrations 记录sql的变化, migrate执行,多人协作或一不留神,常常造成冲突。

  • 解决makemigrations对应冲突的脚本
  • 增量修改表结构
mysql 常用命令

mysql 导入导出的命令。

使用mysqldump命令
mysqldump 是命令行工具,主要用于mysql备份和还原数据。这个命令使用起来方便,直接在终端执行。

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 的主要参数:

-h, --host=ip 主机地址
-u, --user=name 登录用户名
-P, --port=# Mysql连接端口
-p, --password[=name] Mysql密码。如果不给定值,直接回车,会提示输入密码
-d, --no-data 不包含行信息,只导出表结构

这些命令都不用刻意去记,执行 mysqldump --help , 就可以查询使用帮助。

导出整个表(包含数据)
mysqldump -u 用户名 -p [密码] 数据库名 > 导出的文件名
导出表

包含数据

mysqldump -u 用户名 -p 数据库名 表名 > 导出的文件名

只导出表结构

mysqldump -u 用户名 -d -p 数据库名 表名 > 导出的文件名

导入到远程服务器
使用管道命令,还可以将导出的数据直接导入到远程的服务器上,前提是服务器可以相互访问。

mysqldump -u 用户名 -p 数据库名 | mysql -h 远程服务器HOST 远程数据库名
SQL文件压缩备份&还原
mysqldump -u 用户名 -d -p 数据库名 | gzip > 文件名.sql.gz

gunzip < 文件名.sql.gz | mysql -u 用户名 -p 数据库
示例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控制台里,加载执行SQL文件。

登入Mysql

mysql -u root -p

mysql> set names utf8; (防止乱码,先设置字符集)
mysql> use test;
mysql> source ~/Code/tmp/db1_ddl.sql
使用into outfile 和 load data infile命令
有时候,我们需要根据查询条件导出SQL,可以使用mysql语句:into outfile 和 load data infile。

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

导出

select * from tb1 into outfile '/var/lib/mysql-files/outfile1' fields terminated by '|' enclosed by '"' lines terminated by '\r\n' ;
导入

load data infile "/var/lib/mysql-files/outfile1" replace into table tb1 fields terminated by '|' enclosed by '"' lines terminated by '\r\n' ;
用这两条命令还是有注意事项:

分隔符参数

fields关键字指定了文件记段的分割格式,如果用到这个关键字,MySQL剖析器希望看到至少有下面的一个选项:

terminated by 分隔符:意思是以什么字符作为分隔符
enclosed by 字段括起字符
escaped by 转义字符
terminated by 描述字段的分隔符,默认情况下是tab字符( )
enclosed by 描述的是字段的括起字符。
escaped by 描述的转义字符。默认的是反斜杠(backslash: )
字符集设置

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报表到指定的目录。

导入导出一定是在设定的目录文件,否则会报错:ERROR 1290 (HY000):The MySQL server is running with the --secure-file-priv option so it cannot execute this statement

查看配置

SELECT @@secure_file_priv;

常用参数
-A, --all-databases
导出所有数据库
--add-drop-database
在创建数据库之前先DROP数据库
--add-drop-table
在创建表之前先drop表,默认true
--add-locks
在insert语句前加锁,默认true
--compact
导出更少的输出信息(用于调试)。去掉注释和头尾等结构
-c, --complete-insert
使用完整的insert语句(包含列名称)。
-B, --databases
导出几个数据库。参数后面所有名字参量都被看作数据库名。导出文件中会有'USE db_name;'
--default-character-set=name
设置默认字符集
-e, --extended-insert
使用具有多个VALUES列的INSERT语法。这样使导出文件更小,并加速导入时的速度,默认true
**--ignore-table=name **
忽略指定的表不导出
--insert-ignore
在插入行时使用insert ignore
-l, --lock-tables
开始导出前,锁定所有表
--dump-slave
将主库的binlog位置和文件名追加到导出数据的文件中,该参数在在从服务器上执行,相当于执行show slave status.当设置为1时,将会以CHANGE MASTER命令输出到数据文件;设置为2时,会在change前加上注释。
--master-data[=#]
该选项将当前服务器的binlog的位置和文件名追加到输出文件中(show master status)。如果为1,将会输出CHANGE MASTER 命令;如果为2,输出的CHANGE MASTER命令前添加注释信息。
-n, --no-create-db
只导出数据,不添加create database语句,默认false
-t, --no-create-info
只导出数据,不添加create table语句,默认false
-d, --no-data
不导出任何数据,只导出数据库表结构
-q, --quick
不缓冲查询,直接导出到标准输出。默认true
**--replace **
插入数据时用replace
--set-gtid-purged[=name]
是否添加SET@@GLOBAL.GTID_PURGED,默认auto
--single-transaction
使用一致性的快照来导出数据,不锁表,默认false
--tables
覆盖--databases (-B)参数,指定需要导出的表名
-w, --where=name
按照条件导出,只能导出单个表
-u -h -P -p
用户名,主机名,端口,密码

常用方法
1、导出所有库
mysqldump -uroot -p123 --single-transaction --all-databases >all.sql
该命令会导出包括系统数据库在内的所有数据库
2、导出单个库
mysqldump -uroot -p123 --single-transaction test > test.sql
3、导出多个数据库
mysqldump -uroot -p123 --single-transaction --databases db1 db2> db.sql
导出文件中会有'USE db1;USE db2'
4、导出单表
mysqldump -uroot -p123 --single-transaction test table_1 > table_1.sql
5、导出多表
mysqldump -uroot -p123 --single-transaction test --tables table_1 table_2> table.sql
6、只导表结构
mysqldump -uroot -p123 --single-transaction test -d > test_structure.sql
7、只导出数据
mysqldump -uroot -p123 --no-create-info --single-transaction --skip-add-locks --compact -c --set-gtid-purged=OFF test t2 >t2.sql
8、按照where条件导出
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);

  • 变更数据
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`;

  • 关联查询
SELECT *
FROM `your_table_name`
AS a
JOIN `your_anther_table_name`
AS b
WHERE a.column_name = b.column_name...;

  • 合计函数条件查询:WHERE 关键字无法与合计函数一起使用
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. 复制一张表结构
CREATE TABLE `your_table_name`
LIKE `destination_table_name`;

  1. 完全复制一张表:表结构+全部数据
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
  • 列出数据库:SHOW DATABESES;
  • 列出表:SHOW TABLES;
  • 列出表结构:DESC table_name
  • 使用一个数据库:USE database_name;
  • 导入:source 'file';
  • 导出:mysqldump -h 127.0.0.1 -u root -p "database_name" "table_name" --where="condition" > file_name.sql;
  • 查看慢日志:mysqldumpslow -s [c:按记录次数排序/t:时间/l:锁定时间/r:返回的记录数] -t [n:前n条数据] -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'), '', '', '');

// 数据库授权
grant all privileges on dbname.name.* to username@localhost identified by 'password';

// 刷新权限信息
FLUSH PRIVILEGES;

写得不错的:
https://www.jianshu.com/p/590ca53f58c6

https://www.jianshu.com/p/a7e370144ca1

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,098评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,213评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,960评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,519评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,512评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,533评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,914评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,804评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,563评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,644评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,350评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,933评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,908评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,146评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,847评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,361评论 2 342

推荐阅读更多精彩内容