10月 17

mysql的缓存使用

张子萌[2010-10-17]

1。在配置文件中添加配置

query_cache_size = 24M
query_cache_type = 1 #0不缓存
#1 缓存所有的结果,除了 SELECT SQL_NO_CACHE … 查询
#2 仅缓存 SELECT SQL_CACHE … 查询
query_cache_limit = 1048576 #不缓存大于这个值的结果。(缺省为 1M)

2。添加完毕重启mysql数据库

3。登陆mysql数据库查看缓存设置情况

mysql > show variables like ‘%query%’;

have_query_cache 缓存是否可用
long_query_time 超过N秒才记录
query_alloc_block_size 缓存分配的块大小(推荐4096为4k)
query_cache_limit 指示每个查询结果集最大的缓存限制,超过这个值的结果集不缓存
query_cache_min_res_unit 被分配给缓存的最小的块的数量
query_prealloc_size 被缓存用于解析和执行的持久buffer的大小
query_cache_size 缓存的大小

4。查看mysql数据库缓存使用情况

mysql > show status like ‘Qcache%’;

Qcache_free_blocks 查询缓存中的空闲内存块的数目
Qcache_free_memory 查询缓存的空闲内存总数
Qcache_hits 缓存采样数数目
Qcache_inserts 被加入到缓存中的查询数目
Qcache_lowmem_prunes 因为缺少内存而被从缓存中删除的查询数目
Qcache_not_cached 没有被缓存的查询数目
Qcache_queries_in_cache 在缓存中已注册的查询数目
Qcache_total_blocks 查询缓存中的块的总数目

5。维护部分

5.1
查询缓存碎片率 Qcache_free_blocks / Qcache_total_blocks * 100%
如果查询缓存碎片率超过20%
flush query cache 整理缓存碎片

5.2
查询缓存利用率 (query_cache_size – Qcache_free_memory) / query_cache_size * 100%
如果利用率在25%以下,则是query_cache_size设置的过大。

5.3
查询缓存命中率 (Qcache_hits – Qcache_inserts) / Qcache_hits * 100%

5.4
刷新缓存状态
flush status

5.5
重启缓存服务
reset query cache

8月 19

MySql日常操作记录

[整理日:2010-08-19]

1)使用innodb引擎独立表空间,在配置文件my.cnf中添加如下,重启数据库。
[mysqld]
innodb_file_per_table

2)Drop table操作自动回收表空间,如果对于统计分析或是日值表,删除大量数据后可以通过:
alter table TableName engine=innodb

OPTIMIZE TABLE TableName;

3)改变现有的表使用的存储引擎,用以下语句:
ALTER TABLE mytable ENGINE = MyISAM

4)设置InnoDB为默认引擎:在配置文件my.cnf中的 [mysqld] 下面加入default-storage-engine=INNODB 一句,保存。重启mysql服务器

5)查看当前进程和执行sql

show processlist ;

6) 清除30天前的 binlog
PURGE MASTER LOGS BEFORE DATE_SUB( NOW( ), INTERVAL 30 DAY);

7)自动清理30天前的binlog

在配置文件中添加expire_logs_days = 30

4月 09

忘记 mysql 密码

1. 先结束mysql 进程

# killall mysqld

2. 用mysql 安全模式运行并跳过权限难

# mysqld_safe –skip-grant-tables

3. 用root 登录 ,此时不需要密码

# mysql -u root

4. 现在开始修改密码了

mysql> use mysql;

Reading table information for completion of table and column names

You can turn off this feature to get a quicker startup with -A

Database changed

mysql> update user set Password = PASSWORD(‘your new password’) where User = ‘root’ ;

Query OK, 2 rows affected (0.02 sec)

Rows matched: 2 Changed: 2 Warnings: 0

mysql> flush privileges;

mysql> quit

Bye

3月 18

mysql 主从服务器数据同步

[整理:张子萌 2009-10-12]

操作系统:CentOS

数据库版本:mysql-5.1.44-linux-i686-glibc23.tar.gz

A服务器: 192.168.1.100 主服务器(master)

B服务器: 192.168.1.101 从服务器(slave)

主副服务器安装比较简单,此处只列安装顺序的命令。

详细操作可以见http://simon-zzm.blog.163.com/blog/static/88809522201028104721790/中mysql部分。

1. mysql安装

在主从服务器上做以下操作。

# groupadd -g700 mysql

# useradd -g700 -u700 mysql mysql

# tar zxvf mysql-5.1.44-linux-i686-glibc23.tar.gz

# cp mysql-5.1.44-linux-i686-glibc23 /usr/local/mysql

# cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql

# cp /usr/local/mysql/support-files/my-medium.cnf /etc/my.cnf

# chown -R mysql:mysql /usr/local/mysql

2. 配置主服务器

2.1 登录主服务器。初始化数据库,并启动

# /usr/local/mysql/scripts/mysql_install_db –user=mysql

–basedir=/usr/local/mysql –datadir=/usr/local/mysql/data

# /etc/init.d/mysql start

2.2 连接数据库,并创建所使用的库。本文为了测试创建名为testas的数据库

# /usr/local/mysql/bin/mysql -u root

mysql> create database testas;

Query OK, 1 row affected (0.03 sec)

2.3 创建从服务器同步主服务器时使用的账户。账户名为slavetest,密码为123;

Mysql>grant replication slave,reload,super on *.* To

slavetest@192.168.1.101 identified by ‘123’ ;

Mysql> flush privileges;

2.4 停止mysql数据库

# /etc/init.d/mysql stop

2.5 使用系统拷贝命令将主服务器的已经创建的数据,拷贝到备用服务器上。

# scp r /usr/local/mysql root@1192.168.1.101:/usr/local/mysql

注: 向备机传送备份数据库有两种方法。
a)备份数据直接将data目录需要备份数据库的文件夹传到备份数据中。
b)使用MySQLdump的方式来备份主数然后导入备库中(备份时加上”–master-data “参数)。
本文使用第一种方法来备,也建议使用第一种。如果是不能停机,则将主数据库进行锁库后在进行备份操作。
数据库锁定:
FLUSH TABLES WITH READ LOCK;
数据库打开:
UNLOCK TABLES;

2.6 修改主服务器的配置文件。在/etc/my.cnf文件[mysqld]后添加两个参数。第一个是

server-id=master_id,master_id的值为1到2^32-1之间的正整数,推荐使用1。第二个是

选择添加skip-name-resolve,如果开启远程访问,可以防止远程连接失败。

# vi /etc/my.cnf

修改后结果[mysqld]部分,部分截图如下:

2010年3月18日 - simon-zzm - simon个人观点

2.7 启动数据库,记录同步数据的点。

# /etc/init.d/mysql start

# /usr/local/mysql/bin/mysql -u root

mysql> show master status;

获得数据如下图:

2010年3月18日 - simon-zzm - simon个人观点

请记录file和Position的值,在配置从服务器中需要用到。

3. 开始配置从服务器

3.1 登录从服务器,修改从主服务器上所传文件的权限

# chown -R mysql:mysql /usr/local/mysql

3.2 修改配置从服务器的文件。在/etc/my.cnf文件[mysqld]后添加slave_id 的值是 1 到 2^32-1 之间的正整数,这个值一定不能与主服务器中master_id一样。推荐值为2。

# vi /etc/my.cnf

修改后结果[mysqld]部分,部分截图如下:

2010年3月18日 - simon-zzm - simon个人观点

3.3 启动从数据库

# /etc/init.d/mysql start

3.4 编辑sql(使用组服务器上记录的数据),登录数据库后运行sql。

Sql 编写如下:

CHANGE MASTER TO

MASTER_HOST=’192.168.1.100′,

MASTER_USER=’slavetest’,

MASTER_PASSWORD=’123′,

MASTER_LOG_FILE=’mysql-bin.000004′,

MASTER_LOG_POS=106 ;

如下图:

2010年3月18日 - simon-zzm - simon个人观点

3.5 启动从服务器同步服务

mysql> slave start;

4. 服务器配置完成,可以连到主服务器上,创建表、添加数据后,再看从数据库是否也有相同数据。如果数据相同,则配置成功。

注意:为了安全日常登录和操作最好不要使用root用户。不可以在从数据库中修改数据,最好将从数据库连接账号的权限修改为只读。

5. 登录主从数据库使用命令查看当前状态

5.1 登录从服务器,查看当前I/O情况

mysql> show slave statusG

Connecting to master

该线程证尝试连接到master上。

Checking master version

确定连接到master后出现的一个短暂的状态。

Registering slave on master

确定连接到master后出现的一个短暂的状态。

Requesting binlog dump

确定连接到master后出现的一个短暂的状态。该线程向master发送一个请求,告诉它要请求的二进制文件以及开始位置。

Waiting to reconnect after a failed binlog dump request

如果二进制日志转储(binary log dump)请求失败了(由于连接断开),该线程在休眠时进入这个状态,并定期重连。重连的时间间隔由

–master-connect-retry 选项来指定。

Reconnecting after a failed binlog dump request

该线程正尝试重连到master。

Waiting for master to send event

已经连接到master,正等待它发送二进制日志。如果master闲置时,这个状态可能会持续较长时间,如果它等待超过 slave_read_timeout 秒,就会发生超时。这时,它就会考虑

断开连接,然后尝试重连。

Queueing master event to the relay log

已经读取到一个事件,正把它拷贝到中继日志中以备SQL线程处理。

Waiting to reconnect after a failed master event read

读日志时发生错误(由于连接断开)。该线程在重连之前休眠 master-connect-retry 秒。

Reconnecting after a failed master event read

正尝试重连到master。当连接确定后,状态就变成 Waiting for master to send event。

Waiting for the slave SQL thread to free enough relay log space

relay_log_space_limit 的值非零,中继日志的大小总和超过这个值了。I/O线程等待SQL线程先处理中继日志然后删除它们以释放足够的空间。

Waiting for slave mutex on exit

当前线程停止了,这个时间很短。