SQL 语句分类(常用3类)
DML---数据操纵语言(select,insert,delete,update)
DDL---数据定义语言(create,alter,drop)
DCL---数据控制语言(grant,revoke,commit, rollback)
TPL---事物处理语言(begintransaction,commit,rollback)
CCL---指针控制语言(declare,cursor,fetch into,update where current)
1.查看,当前用户表
select user,host from mysql.user;
2.删除用户
delete from mysql.user where host='xxxx'; drop user "xxxx"@"localhost"
3.显示当前数据库
show databases; show databases like '%数据库名%'; use <数据库名>; 连接数据库 select database(); 查看当前数据库
4.删除数据库
drop database <数据库名>;
5.创建库
create database <数据库名>;
6.给用户设置密码(非改密码)
/application/mysql/bin/mysqladmin -u root password '密码'
7.添加额外管理员
delete from mysql.user; grant all privileges on *.* to system@'localhost' identified by '密码' with grant option;
8.数据库启动
方法1:/etc/init.d/mysqld start 方法2:mysqld_safe --user=mysql &
9.数据库关闭
方法1:/etc/init.d/mysqld stop 方法2:kill -9 mysqld 方法3:pkill mysqld 方法4:killall mysqld 方法5:mysqladmin -u root -p 123456 shutdown (优雅关闭)
10.修改登陆提示符,防止误操作
prompt \u@test \r:\m:\s-> 永久生效: [mysql] prompt=\\u@test \\r:\\m:\\s->
11.修改mysql root密码
方法1:mysqladmin -u root -p 123456 password '654321' 方法2:updata mysql.user set password=password("xxxx") where user='root' and host='localhost'; 方法3:set password=password('xxxx')
12.查看表结构
desc mysql.user;
13.修改表数据
updata mysql.user set password=password("xxx") where user='root' and host='localhost';
14.刷新到文件
flush privileges;
15.找回丢失的mysql root 密码
/etc/init.d/mysqld stop mysqld_safe --skip-grant-tables --user=mysql & mysql 登陆 set password=password("xxxx") flush privileges; 重启数据库即可 多实例增加 --defaults-file=/data/3306/my.cnf如 mysqld_safe --defaults-file=/data/3306/my.cnf --skip-grant-tables --user=mysql & mysql -uroot -p -S /data/3306/mysql.sock set password=password("xxxx") flush privileges; 重启数据库即可
16.查询并排序
select user,host,password from mysql.user order by user asc;
17.查看库字符集
show create database xxxx\G
18.分别创建一个gbk\utf8字符集
create database xxxxx DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci; create database xxxxx DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
19.查看版本、用户、时间
select version(); select user(); select now();
20.查看当前库的表
show tables; show tables like 'user'; show tables from <库名>; //查看制定库中的表
21.mysql创建用户与授权
方法1: create user 'qinzc'@'localhost' identified by '123456'; grant all on d3306.* to 'qinzc'@'localhost'; 方法2: grant all on d3306.* to 'test'@'192.168.1.%' identified by '123456';
22.查看用户当前权限
show grants for 'qinzc'@'localhost'; SELECT INSERT UPDATE DELETE CREATE DROP REFERENCES INDEX ALTER CREATE TEMPORARY TABLES LOCK TABLE EXECUT CREATE VIE SHOW VIEW CREATE ROUTINE ALTER ROUTINE EVENT TRIGGER
23.收回权限
revoke insert on d3306.* from 'qinzc'@'localhost';
24.SQL数据导入
mysql -uroot -p123456 d3306</opt/qinzc_bak.sql
25.防止人为误操作mysql数据库
alias mysql='mysql -U' [oldboy_c64 ~]# echo "alias mysql='mysql -U'" >>/etc/profile [oldboy_c64 ~]# . /etc/profile [oldboy_c64 ~]# tail -1 /etc/profilealias mysql='mysql -U'
26.查看 mysql 进程状态 (重要!查看正在执行的SQL语句)
show processlist; show full processlist; //完整语句内容 例:mysql线程中,“大海捞针” 平时登陆数据库show processlist;,发现结果经常超长,找自己要看的的比较困难,而且, SQL显示不全。如果直接执行show full processlist那更是瞬间滚了N屏。找到有问题的 SQL语句非常困难。 现在好了,老男孩给你们推荐如下语句。 mysql -u root -p'oldboy' -S /data1/3307/mysql.sock -e "show full processlist;"|grep -v Sleep 过滤当前执行的SQL语句完整内容,这条命令很有用。不知道你能否体会到。后面还可以加iconv等对中文转码, 根据需求过滤想要的内容,此命令屡试不爽啊。 主库线程同步状态: show processlist\G 从库查看状态: show slave status\G
27.查看进程所有参数变量
show variables; mysql -uroot -p123456 -e "show variables;"
28.查看 mysql 运行状态 (重要!,要分析并做好监控)
show status; mysql -uroot -p123456 -e "show status;" #全局状态 show global status; mysql -uroot -p123456 -e "show global status;" 例: [root@A-host ~]# mysql -u root -p123456 -S /data/3306/mysql.sock -e "show global status;"|grep select Com_insert_select 0 Com_replace_select 0 Com_select 85
29.在线设置参数(一般 开/关{ON/OFF} 参数不能更改)
例子: mysql> show variables like 'key_buffer%'; +-----------------+----------+ | Variable_name | Value | +-----------------+----------+ | key_buffer_size | 16777216 | +-----------------+----------+ 1 row in set (0.00 sec) mysql> set global key_buffer_size=1024*1024*32; Query OK, 0 rows affected (0.08 sec) mysql> show variables like 'key_buffer%'; +-----------------+----------+ | Variable_name | Value | +-----------------+----------+ | key_buffer_size | 33554432 | +-----------------+----------+ 1 row in set (0.00 sec)
30.解析mysqlbinlog日志
binlog日志用来记录mysql内部增删改查等对mysql有更新的内容的记录。 mysqlbinlog --hlep [root@A-host ~]# mysqlbinlog /data/3306/mysql-bin.000001 //查看 [root@A-host ~]# mysqlbinlog -d d3306 /data/3306/mysql-bin.000001 >1.txt //查看d3306库日志(拆库) #指定开始位置和结束位置恢复 mysqlbinlog /data/3306/mysql-bin.000001 --start-position=510 --stop-position=1312 -r pos.sql //-r 与> 一致 #指定开始和结束时间恢复 mysqlbinlog /data/3306/mysql-bin.000001 --start-datatime='2018-8-20 14:42:54' --stop-datatime='2018-8-20 14:43:54' >time.sql
31.mysqlbinlog日志轮询
[mysqld] expire_logs_days = 7 //保留7天日志 类似: find /data/3306/ -type f -name "mysql-bin.000*" -mtime +7|xargs rm -f
32.刷新MySQLbinlog数据
mysqladmin -uroot -p123456 fulsh-logs
不登陆数据库执行mysql命令小结
http://blog.51cto.com/oldboy/632608
停留在世界边缘,与之惜别