mysql的基础操做命令

命令的总结:ss、killall、kill、pkillmysql


关闭数据库方法:linux

mysqladmin -uroot -pPassword shutdownweb

/etc/inti.d/mysqld stopsql

kill -USR2 $(cat path/pid)数据库


更改mysql数据登陆提示符的方法:vim

1.mysql> prompt \u@swolice \r:\m\s->安全

  PROMPT set to '\u@swolice \r:\m\s->'bash

  system@swolice 10:41:22->服务器

2.vim my.cnfide

  [mysql]

  prompt=\\u@swolice \\r:\\m:\\s->


使用mysql的help,太厉害了吧。。。



设置root密码:

mysqladmin -uroot password 'setpassword'

更改密码:

mysqladmin -uroot -p'oldpassword' password 'newpassword' -S /data/3306/mysql.sock

适合忘记root密码的密码更改:--skip-grant-tables

mysqld_safe --defaults-file=/data/3306/my.cnf --skip-grant-tables &

mysqld_safe --skip-grant-tables --user=mysql &

update mysql.user set password=password('newpassword') where user='root' and host='localhost';

flush privileges;

没有root密码:

mysql> set password=password('setpassword');

mysql> flush privileges;



SQL语句的使用:

DQL(数据查询语言)、DML(数据操纵语言)、TPL(事务处理语言)、DCL(数据控制语言)、DDL(数据定义语言)、CCL(指针控制语言)

DQL: select

DML: insert , update , delete

TPL: begin , transaction , commit , rollback

DCL: grant , revoke

DDL: create , drop 

CCL: declare cursor, fetch into, update where current


select database();

select user();


drop删除不了的时候使用delete删除,通常指用户。


建立用户并受权:

grant all privileges on dbname.* to username@localhost identified by 'password';

flush privileges;


查看用户权限:

show grant for username@hostname;


收回用户权限:

revoke insert on dbname.* from username@hostname;



生产环境的用户受权:

一、blog、CMS:

安装期间须要select, insert, update, delete, create, drop。安装完成后收回create和drop。

常规状况下:select, insert update, delete.


二、bbs,discuz:

都须要select, insert, update, delete, create, drop


对于主从的受权:

主库(写为主读为辅):

本机:lnmp,lamp

grant all privileges on blog.* to 'blog'@'localhost' identified by 'blog';

应用服务器和数据库服务器不在一个主机上的受权:

grant all privileges on 'blog'.* to 'blog'@'hostname' identified by 'blog';

严格的受权:重视安全,忽略方便:

grant select, insert, update, delete on 'blog'.* to 'blog'@'hostname' identified by 'blog';

从库(只读):

grant select on 'blog'.* to 'blog'@'hostname' identified by 'blog';


主从高级受权策略:

第一种:

写库:blog   password:password   port:3306    hostname:10.0.0.x

读库:blog   password: password   port: 3306    hostname: 10.0.0.x

第二种:

写库:blog_w password: password   port: 3306    hostname: 10.0.0.x

读库:blog_r password: password   port: 3306    hostname: 10.0.0.x

受权的具体命令:

主库:

grant select, insert, update, delete on 'blog'.* to 'blog'@'10.0.0.x' identified by 'blog';

从库:

grant select on 'blog'.* to 'blog'@'10.0.0.x' identified by 'blog';

从库除了作select外,还能够加read-only参数,严格控制web用户写从库。


主从库的mysql库和表是同步的,没法针对同一个用户受权不一样的权限。由于,主库受权后会自动同步到从库上,致使从库的受权只读失败。

resolve funciton:

1.取消mysql库的同步。

2.受权主库权限后,从库执行收回增删改。

3.不在受权上控制增删改,而是用read-only参数,控制普通用户更新从库,注意,read-only参数对超级用户无效。


查看mysql用户受权:

show grant for 'username'@'hostname';


数据表的操做:

create table tname(

field type,

field type,

field type);


为表的字段建立索引:

create table tname(

field type auto_increment,

field type,

field type

primary key(id),

key index_name(name)

);


删除主键:

alter table tname drop primary key;

增长主键:

alter table tname change id id int primary key auto_increment;


删除索引:

alter table student drop index index_name;

在某列上添加索引:

alter table tname add index index_name(name);

对字段的前n个字符建立普通索引:

create index index_name on tname(col_name(8));


对表的多个字段建立联合索引:

create index index_name on tname(col_name1, col_name2);

show index form tname\G

删除索引:

drop index index_nanme on tname;

对表的多个字段的前n个字符列建立联合索引:

create index index_name on tname(col_name1(8), col_name2(10));

按条件列查询时,联合索引是有前缀生效特性的。

index(a,b,c)仅a, ab, abc三个查询条件列表能够走索引。b, bc, ac, c等没法走索引。


建立惟一非主键索引:

create unique index index_name on tname(col_name);


小表无需创建索引,写频繁,读少的业务要少创建索引。

select user,host from mysql.user where host=....索引必定要建立在条件列,而不是select后的选择数据的列,另外咱们要尽可能选择在惟一值多的大表上创建索引。



建立主键索引:

alter table tname change id id int primary key auto_increment;

删除主键索引:

alter table tname drop primary key;

建立普通索引:

alter table tname add index index_name(col_name(8));

create index index on tname(col_name(8));

create index index_name on tname(col_name1, col_name2);

删除普通索引:

alter table tname drop index index_name;


alter和create的帮助相关

help alter table;



插入数据:

insert into tname (col1, col2...) values (value1, value2...);


查询select语句的执行计划:

explain select * from tname;

help explain

手册须要掌握: 5, 6, 7, 8, 10, 11, 13, 14, 15


查看mysql二进制日志使用mysqlbinlog命令查看二进制日志文件。二进制日志文件只记录更改,不记录查询。

# mysqlbinlog mysql-bin.log


使用二进制日志恢复数据的思路及方法:

首先使用数据库的全备份,恢复到全备份的那个时候的数据,而后再使用二进制日志恢复从全备份到数据出错的时间段的数据。命令以下:

mysql -uroot -proot dbname < /path/to/dbname.sql

mysqlbinlog mysql-bin.000001 > mysql-bin.sql

在mysql.sql文件中找到相关出错时间的出错语句,删除之。在恢复到dbname中便可

mysql -uroot -proot dbnmae < /path/to/mysql-bin.sql

恢复完成。


防止mysql的误操做:使用mysql -U的命令登陆。


删除表数据:

delete from tname;表中的数据一条一条删除。


truncate table tname;先drop掉整个表,而后从新建立该表。(效率高)


增删改表的列(field):

alter table tname add/change.......


更改表名:

rename table old_tname to new_tname;


sql语句重点:建库、建表、索引、列



解决mysql乱码的5种方法:

1.登陆mysql后执行:set names utf8;

2.在sql文件中指定:set names utf8; 登陆mysql执行:source dbname.sql

3.在sql文件中指定:set names utf8; 使用mysql导入:mysql -uroot -proot dbname < dbname.sql

mysql -uroot -proot -e "set names utf8; select * from dbname.tname;"

4.经过mysql导入指定字符集:mysql -uroot -proot --default-character-set=utf8 dbname < dbname.sql

5.修改配置文件:vim my.cnf

[client]

default-character-set=utf8

[mysqld]

default-character-set=utf8 5.1版本

character-set-server=utf8 5.5版本


linux,客户端,服务端,库,表,程序,使用同一字符集。



show variables;

show global status;


set global key_buffer_size=

show vairables like 'key_buffer%';


my.cnf 加 key_buffer_size=

mysql -e


mysqldump, mysqlbinlog, mysql, mysqladmin


修改mysql数据库表的字符集:

alter database character set * 

alter table tname character set * 

对已有的数据表不能修改,只能修改新建立的。


对已有的数据表的字符集修改,须要导出数据,修改字符集后从新导入便可:

alter database dbname character set utf8;



1.导出表结构:

mysqldump -uroot -p --default-character-set=gbk -d dbname > dbname.alltable.sql

--default-character-set=gbk表示用gbk链接,-d只导出表结构。

2.编辑dbname.sql将原字符集改为如今的字符集

3.确保数据库再也不更新,导出全部数据

mysqldump -uroot -p --quick --no-create-info --extended-insert --default-character-set=utf8 dbname > alldata.sql

--quick:用于转储大的表,强制mysqldump从服务器一次一行的检索数据而不是检索全部行,并输出前cache到内存中。

--no-create-info:不建立create table语句。

--extended-insert:使用包括几个values列表的多行insert语法,这样文件更小,IO也小,导入数据时会更快。

--default-character-set=utf8:按照原有字符集导出数据,这样导出的文件中,全部中文到时可见的,不会保存成乱码。

4.编辑alldata.sql将set names utf8改为gbk

5.建库

create database dbname default charset gbk;

6.建立表,执行dbname.alltable.sql

mysql -uroot -proot dbname < dbname.alltable.sql

7.导入数据:

mysql -uroot -proot dbname < alldata.sql


使用mysqldump备份全部的数据库的命令:

mysql -uroot -proot -e "show databases;" | grep -Evi "database|infor|perfor" | sed -r 's#^([a-z].*$)#mysqldump -uroot -proot -B \1|gzip >/opt/\1.sql.gz#g' | bash

相关文章
相关标签/搜索