命令的总结:ss、killall、kill、pkill
关闭数据库方法:
mysqladmin -uroot -pPassword shutdown
/etc/inti.d/mysqld stop
kill -USR2 $(cat path/pid)
更改mysql数据登录提示符的方法:
1.mysql> prompt \u@swolice \r:\m\s->
PROMPT set to '\u@swolice \r:\m\s->'
system@swolice 10:41:22->
2.vim my.cnf
[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;
生产环境的用户授权:
1、blog、CMS:
安装期间需要select, insert, update, delete, create, drop。安装完成后收回create和drop。
常规情况下:select, insert update, delete.
2、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