`
zhou.xingbo
  • 浏览: 52284 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Mysql相关知识

阅读更多

1. Mysql常规使用

安装

server: sudo apt-get install mysql-server

配置

default是只允许本地访问的,如果要其它机器访问,需要修改/etc/mysql/my.cnf配置文件。

default根用户是没有密码的,所以用根用户进入,$mysql -u root,一般只有在设置时才要进入根用户模式。

 

基本操作

为root设置密码->为root建立所需要的数据库db->并为该db创建用户->设置远程访问或控制该db&&/etc/mysql/my.cnf(bind-address=127.0.0.1--bind-address=本机ip)

 

对数据库的操作

显示数据库列表 show databases;

使用某个数据库 use db_name;

显示库中的数据表 show tables;

显示数据表的结构 describe table_name;

 

建库 create database db_name;

使用该数据库 use db_name;

建表 create table table_name (字段设定列表);

删库,删表 drop database db_name, drop table table_name

 

sql文的使用

 

应用

如:

一个建库和建表以及插入数据的实例

school.sql

 

drop database if exists school; //如果存在SCHOOL则删除

create database school; //建立库SCHOOL

use school; //打开库SCHOOL

create table teacher //建立表TEACHER

(

id int(3) auto_increment not null primary key,

name char(10) not null,

address varchar(50) default ’深圳’,

year date

); //建表结束

//以下为插入字段

insert into teacher values(’’,’glchengang’,’深圳一中’,’1976-10-10’);

insert into teacher values(’’,’jack’,’深圳一中’,’1975-12-23’);

 

 mysql -uroot -ppassword < school.sql

 

将文本数据转到数据库中

文本数据应符合的格式:字段数据之间用tab键隔开,null值用\\n来代替

data.txt

 

3 rose 深圳二中 1976-10-10
4 mike 深圳一中 1975-12-23

 

 load data local infile data.txt into table table_name

 

备份数据库

导出表

mysqldump --opt school > school.sql

school.sql是一个文本文件,文件名任取。

导出库

mysqldump --databases db1 > db1.sql 

mysqldump --all-databases > all-databases.sql

 

2. Mysql优化技巧

对数据库的快速访问和响应.

 

1. 优化Mysql查询缓存

在Mysql服务器上进行查询,可以启用高速查询缓存。让数据库引擎在后台处理是提高性能的最有效方法之一。

当同一个查询被执行多次时,如果结果是从缓存中提取,那是相当快的。

Query Cache

在使用中,查询缓存会存储一个select查询的文本与被传送到客户端的相应结果。如果之后接受到一个同样的查询,服务器将从查询缓存中检索结果,而不是再次分析和执行这个同样的查询。

 

Note:查询缓存绝不返回过期数据。当数据被修改后,在查询缓存中的任何相关词条均被清除。

 

Note: SELECT * FROM tbl_name 和 select * from tbl_name对于query cache是认为不同的。

 

Note:如果查询结果被从查询缓存中返回,那么状态变量Com_select将不会被增加,但是Qcahce_hits却会增加。

 

设置:/etc/mysql/my.cnf中

query_cache_limit 不缓存大于这个值的结果

query_cache_min_res_unit 查询缓存以最小的尺寸分配块。当一个查询执行完成,最后的结果块被修整到实际数据的大小。

query_cache_size 为了存储老的查询结果而分配的内存数量(以字节指定)。如果设置它为0,查询缓存将被禁止(default 0)

query_cache_type

0(off,不缓存或重新得到结果)

1(on,缓存所有的结果,除了select sql_no_cache...)

2(demand,仅缓存select sql_cache...)

 

query_cache_type 使用Qcache的方式

select @@query_cache_type;

select sql_no_cache id, name from table_name;

set session query_cache_type=off;

 

系统变量have_query_cache设置Qcache是否可用

show variables like 'have_query_cache';

 

系统变量query_cache_size

select @@global.query_cache_size;

set @@global.query_cache_size=10000;

 

query_cache_limit控制Qcache结果的最大值

select @@global.query_cache_limit;

set @@global.query_cache_limit=1000;

 

查询缓存的状态和维护

FLUSH QUERY CACHE 命令可以整理查询缓存,以便更好的利用它的内存

RESET QUERY CACHE 从查询缓存中移除所有的查询结果

 

SHOW VARIABLES LIKE 'have_query_cache' 检查查询缓存在你的Mysql中是否被引进

SHOW STATUS 可以监视查询缓存的性能

 

Qcache_queries_in_cache 在缓存中已注册的查询数目

Qcache_inserts 被加入到缓存中的查询数目

Qcache_hits 缓存采样数数目

Qcache_lowmem_prunes 因为缺少内存而被从缓存中删除的查询数目

Qcache_not_cached 没有被缓存的查询数目 (不能被缓存的,或由于 QUERY_CACHE_TYPE)

Qcache_free_memory 查询缓存的空闲内存总数

Qcache_free_blocks 查询缓存中的空闲内存块的数目

Qcache_total_blocks 查询缓存中的块的总数目

Total number of queries = Qcache_inserts + Qcache_hits + Qcache_not_cached.

 

 Note:Qcache_total_blocks和Qcache_free_blocks可能显示查询缓存的碎片。在FLUSH QUERY CACHE之后,只有剩下一个单独的(大块)空闲块

 

 

2. 用EXPLAIN使你的select查询更加清晰

3. 利用LIMIT 1取得唯一行

增加一个LIMIT 1会令查询更加有效。这样数据库引擎发现只有1后将停止扫描,而不是去扫描整个表或索引。

select 1 from table_name where state="xxx" limit 1;

4. 索引中的检索字段

alter table 'table_name' add index ('c_name');

 

小技巧

磁盘碎片整理

optimize table table_name 

myisamchk -r table_name

 

explain来查看瓶颈

 

mysql gui

sudo apt-get install mysql-gui-tool-common

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics