瑞当

瑞当科技
创新引领未来

MySQL学习笔记第1课

这里抽时间和朋友们分享一下我以前学习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--

推荐:Mysql学习笔记一

基础部分: 1. 创建表: create table user( id smallint primary key not null auto_increment, name varchar(20), age smallint

); 2. 常用命令: create dat

---- 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 | +---------------+------------------------------+