MySQL学习笔记第1课(共10课)

这里抽时间和朋友们分享一下我以前学习MySQL总结的一些笔记,本来总结的文档有100多页,现在每天整理一点分享给大家。

1、MySQL常用命令

序号 命令 解释
1 SHOW CHARACTER SET 显示所有可用的字符集
2 SHOW COLLATION 显示所有可用的字符校对
3 SHOW DATABASES 显示服务器主机上的数据库
4 SHOW CREATE DATABASE 显示数据库定义
5 SHOW TABLES 显示定数据库中的非TEMPORARY表信息
6 SHOW CREATE TABLE tbl_name 显示表定义
7 SHOW COLUMNS FROM tbl_name 显示在一个给定表中的各列的信息
8 SHOW INDEX FROM tbl_name 显示在一个给定表中的索引信息
9 SHOW OPEN TABLES 显示在表缓存中当前被打开的非TEMPORARY
10 SHOW GRANTS FOR user_name 显示为用户账户复制权限时必须发布的GRANT语句
11 SHOW PRIVILEGES 显示MySQL服务器支持的系统权限清单
12 SHOW TRIGGERS 显示触发程序
13 SHOW VARIABLES 显示MySQL系统变量
14 SHOW ENGINE engine_name {LOGS | STATUS } 显示存储引擎的日志或状态信息
15 SHOW ENGINES 显示存储引擎的状态信息
16 SHOW PROCESSLIST 显示哪些线程正在运行
17 SHOW STATUS 显示服务器状态信息
18 SHOW ERRORS 显示由上一个生成消息的语句导致的错误
19 SHOW WARNINGS 显示由上一个生成消息的语句导致的错误、警告和注意消息
20 DESCRIBE tbl_name [col_name | wild] 提供有关表中各列的信息
21 use db_name; 使用数据库,用于后续语句
22 select now(); 查询时间
23 select user(); 查询当前用户
24 select version(); 查询数据库版本
25 select database(); 查询当前使用的数据库
26 flush privileges; 用于从mysql数据库中的授权表重新载入权限。
27 clear 中断输入命令
29 help 显示帮助列表
30 exit or quit 退出mysql
31 status 显示mysql服务状态
32 tee 记录所有输入,然后输出到文件
33 notee 结束tee输入
34 source file_name 使用sql脚本

Show命令的补充:
show columns from table_name;
show index from table_name;
show grants for ‘jiangshouzhuang’@’localhost’


2、MySQL管理工具


mysqladmin是执行管理操作的客户程序,例如创建或删除数据库,重载授权表,将表刷新到硬盘上,以及重新打开日志文件。还可以用来检索版本、进程,以及服务器的状态信息。

语法是:mysqladmin [options] command1 command2 …

options
-f --force 出现错误可以继续执行;drop database不需要确认
-i n --sleep=n n秒钟重复命令
-r --relative 配合参数-i使用显示当前操作与上次操作的差异,目前该选项只用于extended-status命令
-E --vertical 垂直打印输出。类似于--relative,但垂直打印输出。
-s --silent 如果不能建立与服务器的连接则以沉默方式退出。
-w n --wait=n 如果不能建立连接,等待并重试n次。
  --connect-timeout 连接超时之前的最大秒数。默认值为43200(12小时)
  --shutdown-timeout 等候关闭的最大秒数。默认值为3600(1小时)

command
create dbname 创建数据库(CREATE DATABASE)
drop dbname 删除数据库(DROP DATABASE)
flush-hosts 刷新主机缓存中的所有信息。(FLUSH HOSTS)
flush-logs 刷新所有日志(FLUSH LOGS)
flush-status 清除状态变量(FLUSH STATUS)
flush-tables 刷新所有表(FLUSH TABLES)
flush-threads 刷新线程缓存
flush-privileges 重载授权表(FLUSH PRIVILEGES)
password newpassw 设置用户密码(SET PASSWORD)
processlist 显示活动服务器线程的列表(SHOW THREADS)
kill id1, id2,  杀掉服务器线程(KILL)
ping 检查服务器是否仍活动
reload 重载授权表
refresh 刷新所有表并关闭和打开日志文件
shutdown 停止服务器
start-slave / stop-slave 启停止服务器上复制的附属进程
status 显示短服务器状态消息
extended-status 显示服务器状态变量及其值(SHOW STATUS)
variables 显示服务器系统变量及其值(SHOW VARIABLES)
version 显示服务器的版本信息

举个例子,杀掉一个进程:
i2ksvr /home/mysql>mysqladmin -u root -pzhangyun processlist
+-----+-----------------+-----------+----+---------+------+-----------------------------+------------------+
| Id  | User            | Host      | db | Command | Time | State                       | Info             |
+-----+-----------------+-----------+----+---------+------+-----------------------------+------------------+
| 1   | event_scheduler | localhost |    | Daemon  | 1227 | Waiting for next activation |                  |
| 88  | root            | localhost |    | Sleep   | 978  |                             |                  |
| 496 | root            | localhost |    | Query   | 0    |                             | show processlist |
+-----+-----------------+-----------+----+---------+------+-----------------------------+------------------+
i2ksvr /home/mysql> mysqladmin -u root -pzhangyun kill 上面的Id号88


3、mysql的数据库和实例
1、数据库:物理操作系统文件或其他形式文件类型的集合。在mysql中,数据库文件可以是frm、myd、myi、ibd结尾的文件。
2、实例:由数据库后台进程/线程以及一个共享内存区组成。共享内存可以被运行的后台进程/线程所共享。需要牢记的是,数据库实例才是真正用来操作数据库文件的。


3、查看数据库启动实例时,会到哪里去查找配置文件
i2ksvr6 /home/mysql> mysql --help | grep my.cnf
order of preference, my.cnf, $MYSQL_TCP_PORT,
/etc/my.cnf /etc/mysql/my.cnf /usr/local/mysql/etc/my.cnf /home/mysql/my.cnf ~/.my.cnf
可以看到,mysql是按照/etc/my.cnf --> /etc/mysql/my.cnf -->…顺序来读取的。相同的配置项以最后一个配置文件中的配置项为准。


4、在mysql环境里执行Linux的命令:
mysql>\!ls -lh /home/mysql/data
总计 19M
-rw-rw---- 1 mysql mysql    6 2012-08-27 14:17 i2ksvr6.pid
-rw-rw---- 1 mysql mysql  18M 2012-08-28 15:32 ibdata1
-rw-rw---- 1 mysql mysql 2.9M 2012-08-28 15:32 ib_logfile0
-rw-rw---- 1 mysql mysql    1 2012-08-27 16:24 ib_logfile1
drwx------ 2 mysql mysql 2.4K 2012-08-24 11:13 mysql
drwx------ 2 mysql mysql  824 2012-08-24 11:13 performance_schema
drwx------ 2 mysql mysql   48 2012-08-24 11:13 test
drwx------ 2 mysql mysql 8.9K 2012-08-24 11:14 xmppdb


或用system命令
mysql>system ls -lh /home/mysql/data
总计 19M
-rw-rw---- 1 mysql mysql    6 2012-08-27 14:17 i2ksvr6.pid
-rw-rw---- 1 mysql mysql  18M 2012-08-28 15:32 ibdata1
-rw-rw---- 1 mysql mysql 2.9M 2012-08-28 15:32 ib_logfile0
-rw-rw---- 1 mysql mysql    1 2012-08-27 16:24 ib_logfile1
drwx------ 2 mysql mysql 2.4K 2012-08-24 11:13 mysql
drwx------ 2 mysql mysql  824 2012-08-24 11:13 performance_schema
drwx------ 2 mysql mysql   48 2012-08-24 11:13 test
drwx------ 2 mysql mysql 8.9K 2012-08-24 11:14 xmppdb


5、mysql的组件
连接池组件
管理服务和工具组件
SQL接口组件
查询分析器组件
优化器组件
缓冲组件
插件式存储引擎
物理文件


6、创建存储
mysql> delimiter //
CREATE PROCEDURE dowhile()
BEGIN
  DECLARE v1 INT DEFAULT 1;


  WHILE v1 <= 10000000  DO
insert into t1 values(v1);
    SET v1 = v1 + 1;
  END WHILE;
END//


执行存储:
mysql> CALL dowhile ();
指定输出的变量:
mysql> CREATE PROCEDURE simpleproc (OUT jiang INT)
    -> BEGIN
->   SELECT COUNT(*) INTO jiang FROM t1;
    -> END//
Query OK, 0 rows affected (0.00 sec)
mysql> call counts(@a);
Query OK, 1 row affected (4.33 sec)


mysql> SELECT @a;
+----------+
| @a       |
+----------+
| 10000000 |
+----------+
1 row in set (0.00 sec)


7、日志信息
(1)错误日志
mysql> show variables like 'log_error';
+---------------+------------------------------------+
| Variable_name | Value                              |
+---------------+------------------------------------+
| log_error     | /home/mysql/log/error/mysqlerr.err |
+---------------+------------------------------------+


(2)慢查询日志,默认数据库没有打开。
mysql> show variables like '%long%';
+---------------------------------------------------+-----------+
| Variable_name                                     | Value     |
+---------------------------------------------------+-----------+
| long_query_time                                   | 10.000000 |
| max_long_data_size                                | 16777216  |
| performance_schema_events_waits_history_long_size | 10000     |
+---------------------------------------------------+-----------+
mysql> show variables like '%log_slow%';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| log_slow_queries | ON    |
+------------------+-------+
另外一个和慢查询日志有关的参数是log_queries_not_using_indexes,如果运行的SQL语句没有使用索引,则MySQL数据库同样会将这条SQL语句记录在慢查询日志里面。
mysql> show variables like '%log_queries%';
+-------------------------------+-------+
| Variable_name                 | Value |
+-------------------------------+-------+
| log_queries_not_using_indexes | ON   |
+-------------------------------+-------+
使用mysqldumpslow命令,分析慢查询日志
比如想获取锁定时间最长的10条SQL语句,可以运行:
mysqldumpslow–s al –n 10 i2ksvr6-slow.log


MySQL5.1开始支持将慢查询日志记录到一张表里。但是需要将log_output改为table,如下:
mysql> show variables like '%log_output%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_output    | FILE  |
+---------------+-------+


mysql> set global log_output='TABLE';
Query OK, 0 rows affected (0.00 sec)


mysql> show variables like '%log_output%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_output    | TABLE |
+---------------+-------+
参数log_output是动态的,并且是全局的。可以在线进行修改。
查看slow_log表定义发现,该表是CSV引擎,对大数据查询效率不高,可以转化为MyISAM表,提供查询效率。
mysql> alter table mysql.slow_log engine=myisam;
ERROR 1580 (HY000): You cannot 'ALTER' a log table if logging is enabled
需要关闭慢查询,才可以修改。
mysql> set global slow_query_log=off;
Query OK, 0 rows affected (0.01 sec)
其实,转化为MyISAM为有额外的开销。
mysql> alter table mysql.slow_log engine=myisam;
Query OK, 2 rows affected (0.20 sec)
Records: 2  Duplicates: 0  Warnings: 0


(3)查询日志
记录了所有对MySQL数据库请求的信息。同样有一张表general_log日志记录。(MYSQL5.1开始)
mysql> show variables like '%general_log%';
+------------------+------------------------------+
| Variable_name    | Value                        |
+------------------+------------------------------+
| general_log      | OFF                          |
| general_log_file | /home/mysql/data/i2ksvr6.log |
+------------------+------------------------------+


(4)二进制日志
记录了对数据库执行更改的所有操作,但是不包括select和show这类操作。
作用:恢复数据和复制数据
通过参数配置log-bin可以开启二进制日志,如果不指定name,则默认二进制日志文件名为主机名,后缀名为二进制日志的序列号。
log-bin= ../binlog/mysqlbinlog
指当前目录的binlog目录下,文件名为mysqlbinlog,后缀为序列号。
binlog_format参数十分重要,这影响了记录二进制日志的格式。值有STATEMENT、ROW、MIXED。


二进制日志文件,用mysqlbinlog工具查看

8、套接字文件
mysql> show variables like '%socket%';
+---------------+-----------------+
| Variable_name | Value           |
+---------------+-----------------+
| socket        | /tmp/mysql.sock |
+---------------+-----------------+


9、pid文件
当mysql启动时,会将自己的进程ID写入一个文件中,该文件即为pid文件。


mysql> show variables like '%pid_file%';
+---------------+------------------------------+
| Variable_name | Value                        |
+---------------+------------------------------+
| pid_file      | /home/mysql/data/i2ksvr6.pid |
+---------------+------------------------------+


你可能感兴趣的:(MySQL)