mariadb or mysql
客户端程序;
mysql:交换式工具
mysqldump:备份工具
mysqladmin:基于mysql协议管理mysqld
mysqlimprot:数据导入工具;
非客户端类的管理工具:
myisamchk,myisampack
如何获取程序默认使用的配置;
mysql --print-defaults
mysqld --print-defaults
客户端使用的选项:
-u:user
-h:host
-p:password
-P:port
--protocol={tcp|sock}
-S:socket
-D:database
-C:--compress
mysql -e “sql”:不进入交互式模式直接运行sql
mysql -e "show databases;"
mysql的使用模式:
交换模式:
客户端命令:\h,help
服务器端命令:sql;
脚本模式:
方法一:mysql -uroot -h127.0.0.1 -p123456 < /tmp/test.sql
例如:mysql -uroot -h127.0.0.1 -P3306 -p123456 -Dmysql </tmp/test.sql
方法二:mysql> source /tmp/test.sql
服务器端:
获取可用参数列表:
mysqld --verbose --help | more
获取运行中的mysql进程的服务器参数:
mysql>show global variables;
mysql>show session variables;
注意:其中有些参数支持运行时修改,立即生效,有些不支持,需要通过修改配置文件
并重启服务器程序生效;
修改服务器变量的值:
mysql>help set
全局:
set global system_var_name=value;
set @@global.system_var_name=value;
会话:
set [session] system_var_name=value;
set @@[session.]system_var_name=value;
状态变量:用于保存mysqld运行中的统计数据的变量。
msyql>show global status;
msyql>show session status;
mysql数据类型:
字符型、数值型、日期时间型、内建类型
字符型:
CHAR ,BINARY:定长数据类型
VARCHAR,VARBINARY:变成数据类型;需要结束符;
TEXT:TINYTEXT,TEXT,MEDIUMTEXT,LONGTEXT
BLOB:TINYBLOB,BLOB,MEDIUMBLOB,LONGBLOB
EUNM,SET
数值型:
精确数值型:
整形:TINYINT,SMALLINT,MEDIUMINT,INT,BIGINT
十进制型:DECIMAL,NUMERIC
近似数值型
浮点型:FLOAT
DOUBLE
BIT
日期时间型:
DATA
TIME
DATATIME
TIMESTAMP
修饰符:
NOT NULL:非空约束
NULL:
DEFAULT 'STRING':指明默认值
CHARACTER SET '':字符集
COLLATION:使用的排序规则
mysql>show character set;
mysql>show collation;
AUTO_INCREMENT:
UNSIGNED
PRIMARY KEY|UNIQUE KEY
NOT NULL
mysql>select LAST_INSERT_ID();
sql_mode定义约束规则:
set global sql_mode='TRADITIONAL';
常用mode:TRADITIONAL,STRICT_TRANS_TABLES,or STRICT_ALL_TABLES
查看警告:
show warning
查看表状态:
show table status like 'table'\G;
mysql数据文件类型:
数据文件,索引文件
重做日志,撤销日志,二进制日志、错误日志、查询日志、慢查询日志、中继日志
创建索引:
alter table test add index(age);
create index index_name on test (name);
查看索引:
show indexs from test;
查看执行计划:
explain select * from test where id=1\G
忘记管理员密码的解决办法;
1.在/etc/my.cnf中加入 skip-grant-tables
2.启动mysqld服务使用update修改管理员密码:update user set password=password('123456') where user='root';
3.重启mysqld
查询缓存:
通过查询语句哈希判断:哈希值考虑的因素包括
查询本身,要查询的数据库,客户端使用协议版本,。。
查询语句任何字符不同,都会导致缓存不能命中
不会被缓存:
查询中包含UDF,存储函数、用户自定义变量、临时表、系统表、或者包含列级权限的表、有着不确定值得函数:now();
缓存相关变量:
show global variables like '%quer%';
query_cache_min_res_unit:查询缓存中内存块的最小分配单位;默认4k
query_cache_limit:能缓存的最大查询结果;
对于有着较大结果的查询语句,建议在select中使用sql_no_cache
query_cache_size:查询缓存总共可用的内存空间,单位字节,必须是1024的整数倍
query_cache_type:ON,OFF,DEMAND
query_cache_wlock_invalidate:如果某个表被其他的连接锁定,是否仍然可以从查询缓存中返回结果;默认值为OFF,表示可以返回。ON表示不允许返回。
查询相关的钻拖变量
mysql> show global status like 'Qcache%';
+-------------------------+-------+
| Variable_name | Value |
+-------------------------+-------+
| Qcache_free_blocks | 0 |
| Qcache_free_memory | 0 |
| Qcache_hits | 0 |
| Qcache_inserts | 0 |
| Qcache_lowmem_prunes | 0 |
| Qcache_not_cached | 0 |
| Qcache_queries_in_cache | 0 |
| Qcache_total_blocks | 0 |
+-------------------------+-------+
缓存命中率:Qcache_hits/(Qcache_hits+Com_select)
mysql的存储引擎;
create table xx(
....
) engine=myisam (指定存储引擎)
show create table xx;
查看默认存储引擎:
show variables like '%storage_engine%';
查看mysql可以提供的存储引擎
show engines
修改表的存储引擎;ALTER TABLE my_table ENGINE=InnoDB
InnoDB:处理大量的短期事务:数据存储于“表空间(table space)”中
(1)所有表的数据和索引放到一个表空间中
表空间文件:datadir定义的目录下
ibddata1,ibdata2,...
(2)每个表单独使用一个表空间存储表的数据和索引;
innodb_file_per_table=on
数据文件:tbl_name.ibd,tbl_name.frm
Mariadb(xtradb)
并发:MVCC,间隙锁
索引:聚集索引、辅助索引
性能:支持“自适应hash索引”、插入缓存区、预计操作
备份:支持热备
MyISAM:
支持全文索引、压缩、空间函数;不支持事务,不支持行级锁
崩溃后无法完全恢复
适用场景:只读(或者写较少)、表较小(可以接受长时间的修复操作)
Aria:crash-safe
文件:tbl_name.frm:表格式定义
tbl_name.MYD:数据文件
tbl_name.MYI:索引文件
特性:
加锁和并发:表级锁
修复:手工或自动修复:但可能丢失数据
索引:非聚集索引
延迟更新索引键;
支持压缩表
其他存储引擎:
CSV:将普通的CSV(字段通过逗哥分隔)作为mysql表使用
MRG_MYISAM:将多个MyISAM表合并成一个虚拟表;
BLANKHOLE:类似于/dev/null,不存储任何数据
MEMORY:所有数据保存于内存中,内存表;支持hash索引;表级锁
本文转自阿伦艾弗森 51CTO博客,原文链接:http://blog.51cto.com/perper/2053013,如需转载请自行联系原作者