存档

‘Mysql’ 分类的存档

Mysql的慢查询分析

2009年9月13日 baalchina 没有评论

最基本的是mysql自带的mysqlslowdump

用起来很简单:

 

mysqldumpslow -s c -t 20 host-slow.log

 

参数:

  1. -s,排序,c,t,l,r以及ac,at,al,ar分别是按照query次数,时间,lock时间,返回记录排序。加a就是倒序。
  2. -t,top n,跟上数字就是算出top多少条
  3. -g,跟正则表达式。

先进一点的是mysqlsla,也是一个perl脚本,

网址:http://hackmysql.com/mysqlsla

同时这个网站也有其他一些工具,看起来都不错。

 

这个需要小安装一下:

tar xvfz mysqlsla-2.03.tar.gz
cd mysqlsla-2.03
perl Makefile.PL
make
make install

注意需要perl的支持!

#yum install perl

#yum install perl-Time-HiRes

 

后者是因为第一次运行的时候说2095行报错,于是看了一下,2095行是

  use Time::HiRes qw(gettimeofday tv_interval);

安装下就好了。不复杂。

 

运行也比较简单:

— Slow log: mysqlsla -lt slow slow.log

— General log: mysqlsla -lt general general.log

— Binary log: mysqlbinlog bin.log | mysqlsla -lt binary

 

mysqlsla -lt slow /data/database/slog.log

 

注意lt=log type,他其实也可以分析mysql的其他日志类型的。

 

看看他的日志,还是很清晰的:

sla

 

 

参考:

http://kenwu.me/compare-five-mysql-slowlog-analysis-tool

分类: Mysql 标签: , ,

mysql备份之mysqldump

2009年8月23日 baalchina 没有评论

mysqldump其实就是把mysql数据库dump成sql文件。速度相当快(当然,没有直接copy快..哈哈),兼容性好。sql语句嘛,通吃的。

最简单的dump:

/usr/local/mysql/bin/mysqldump --uroot --ppassword discuz cdb_members > /data/backup/members.sql

rsync --vzrtopg –progress  --delete rsync://ubuntu.srt.cn/ubuntu/ /cygdrive/L/mirror/ubuntu/

 

就是把discuz库的cdb_members表dump成members.sql文件。

mysqldump还有很多参数,常用的:

  • --opt,等同与添加--add-drop-table --add-locks --create-options --disable-keys --extended-insert --lock-tables --quick --set-charset这一堆参数
  • --lock-tables,锁表。dump的时候把这个表锁起来,保证的完整性。
  • --lock-all-tables,锁有的表,保证的完整性。

 

参考:

http://dev.mysql.com/doc/refman/5.0/en/mysqldump.html

分类: Linux, Mysql 标签: , ,

mysql的常用操作命令

2009年8月20日 baalchina 没有评论

检测并修复数据库

修复特定库(database)

/usr/local/mysql/bin/mysqlcheck -o -r database –uroot –ppassword

 

修复所有库

/usr/local/mysql/bin/mysqlcheck -A -o -r -uroot –ppassword

 

如果只修复特定表:

/usr/local/mysql/bin/mysqlcheck -c -r discuz cdb_ai -uroot –ppassword

 

 

备份数据库,mysqldump

参考:mysqldump的使用

分类: Linux, Mysql 标签: ,

mysql的热备/Replication

2009年8月2日 baalchina 没有评论

mysql的双机热备机制其实比较简单。

几点注意的:

  1. 采用的是Master-Slave机制。Slave会从Master读取数据。
  2. Master必须打开二进制日志功能,通过my.cnf中的log-bin参数。
  3. 需要Master上建立一个备份用户。
  4. 通过Server-id来区别主/备。
  5. 第一次必须将数据完整同步,记得将Master锁定,导出,然后导入到备,设置好所有的Replication之后,unlock Master的表。

 

 

下面是Master的my.cnf参数:

 

server-id       = 1
log-bin
binlog-do-db = ucenter
binlog-ignore-db = bbs

Server-id代表服务器编号。1是Master。Slave通过这个来同步。

需要启用二进制日志。log-bin可以指定log文件名称,也可以不写默认主机名。

下面是要备份和不要备份的database名称。

 

查看状态:

mysql> show master status\G;

如下:

 

mysql> show master status\G;
*************************** 1. row ***************************
            File: mysql-bin.000110
        Position: 2602
    Binlog_Do_DB: ucenter
Binlog_Ignore_DB: bx8,card,cmsware_plus2,cmsware_zone,comsenzcensor,d6,d61,d61new,d62,d63,discuz,discuzzone,disuczbackup,dz2,dzzone,mysql,nauzone,nauzone1,nauzone2,tzsc,uc,uch,uchome,wikidb,wp,xmjc
1 row in set (0.00 sec)

ERROR:
No query specified

记录下二进制日志以及Position。这里分别是mysql-bin.0001102602,后面要用到。

 

下面是Slave的参数

启动mysql,然后进入mysql命令行

mysql> change master to
-> master_host = 'ip_address',
-> master_user = 'username',
-> master_password = 'password',
-> master_log_file = 'mysql-bin.000110',
-> master_log_pos = 2602;

 

注意最后两个参数,是前面记下来的参数。

这时候在Master上会有这个进程:

 

*************************** 3. row ***************************
     Id: 939737
   User: replication
   Host: 210.28.92.215:56520
     db: NULL
Command: Binlog Dump
   Time: 556
  State: Has sent all binlog to slave; waiting for binlog to be updated
   Info: NULL

当然,Slave上也会有对应的进程:

*************************** 2. row ***************************
     Id: 5
   User: system user
   Host:
     db: NULL
Command: Connect
   Time: 609
  State: Waiting for master to send event
   Info: NULL
*************************** 3. row ***************************
     Id: 6
   User: system user
   Host:
     db: NULL
Command: Connect
   Time: -27246
  State: Has read all relay log; waiting for the slave I/O thread to update it
   Info: NULL
3 rows in set (0.00 sec)

 

Troubleshoot

第一次做的时候show processlist,老是卡在Queueing master event to the relay log状态,当然也没法同步了。

[root@mysql-replication mysql]# tail /usr/local/mysql/var/mysql-replication.err

错误提示如下:

090802 10:01:07 [ERROR] Error reading packet from server: File './mysql-bin.000005' not found (Errcode: 2) ( server_errno=29)
090802 10:01:07 [Note] Slave I/O thread: Failed reading log event, reconnecting to retry, log 'mysql-bin.000004' at postion 98

好像是读取binlog错误。

然后看/usr/local/mysql/var下面无数的二进制文件..

参考这个:

http://bbs.chinaunix.net/viewthread.php?tid=1311931&extra=&page=2

是由于数据不同步造成的。

 

解决办法:

 

首先,Master上

mysql> flush tables with read lock;

将表锁定。然后将需要备份的数据库打包移动到Slave数据库上。

Master上

启动Slave的MySQL,运行以下命令

分类: Linux, Mysql 标签: ,

MySQL的安装

2009年8月2日 baalchina 没有评论

Mysql的安装还是比较简单的。

 

首先去下载源码包,注意选择Source。

 

一路编译,安装。

参考:

 

http://dev.mysql.com/doc/refman/5.1/zh/installing.html#quick-install

shell> groupadd mysql

shell> useradd -g mysql mysql

shell> gunzip < mysql-VERSION.tar.gz | tar -xvf -

shell> cd mysql-VERSION

shell> ./configure --prefix=/usr/local/mysql

shell> make

shell> make install

shell> cp support-files/my-medium.cnf /etc/my.cnf

shell> cd /usr/local/mysql

shell> bin/mysql_install_db --user=mysql

shell> chown -R root  .

shell> chown -R mysql var

shell> chgrp -R mysql .

shell> bin/mysqld_safe --user=mysql &

我编译用的是这个参数:

./configure --prefix=/usr/local/mysql --with-comment=Source --with-server-suffix=-Nau_MySQL --with-mysqld-user=mysql --without-debug --with-big-tables --with-charset=gbk --with-collation=gbk_chinese_ci --with-extra-charsets=all --with-pthread --enable-static --enable-thread-safe-client --with-client-ldflags=-all-static --with-mysqld-ldflags=-all-static --enable-assembler --without-isam --without-innodb --without-ndb-debug

安装好之后,记得给MySQL设置一个密码

mysqladmin uroot -password123456

 

或者

shell> mysql -u root

mysql> SET PASSWORD FOR ''@'localhost' = PASSWORD('newpwd');

 

http://dev.mysql.com/doc/refman/5.1/zh/installing.html#default-privileges

分类: Linux, Mysql 标签: ,

查看apache,php,mysql编译参数

2009年8月2日 baalchina 没有评论

查看mysql编译参数:

cat /usr/local/mysql/bin/mysqlbug | grep CONFIGURE_LINE

查看apache编译参数:

cat $apachehome$/build/config.nice

 

也可以用

httpd –l

或者

httpd -v

查看php编译参数:

$PHP$/bin/php -i | grep configure

 

当然,写个phpinfo也是可以的。

<?php phpinfo();?>

分类: Apache, Mysql, PHP 标签: , ,

MySQL数据库备份+定时上传

2009年2月22日 baalchina 没有评论

比较的简单。

#!/bin/bash
date=` date +%Y%m%d`
/usr/local/mysql/bin/mysqldump --database uch -uroot -ppassword &gt; /data/mysqldata/uch-$date.dump
gzip /data/mysqldata/uch-$date.dump
分类: Linux, Mysql 标签: , ,

Mysql的一些操作

2008年12月21日 baalchina 没有评论

1、启动与停止

 

1、使用 service 启动:
service mysqld start

2、使用 mysqld 脚本启动:
/etc/inint.d/mysqld start

3、使用 safe_mysqld 启动:

/usr/local/mysql/bin/mysqld_safe &

注意最后的&,这样敲个回车之后可以回到提示符,否则就死在那里了。

二、停止

1、使用 service 启动:
service mysqld stop

2、使用 mysqld 脚本启动:
/etc/inint.d/mysqld stop

3、/usr/local/mysql/bin/mysqladmin –uroot –p shutdown

输入密码,ok.

三、重启

1、使用 service 启动:service mysqld restart

2、使用 mysqld  脚本启动:/etc/inint.d/mysqld restart

分类: Mysql 标签: ,

新生注册的处理

2008年8月18日 baalchina 没有评论

首先是sql表的建立,以2008为例

1
2
3
4
5
6
7
8
9
CREATE TABLE `cdb_students_2008` (
  `id` mediumint(8) unsigned NOT NULL auto_increment,
  `zkzhm` varchar(20) NOT NULL,
  `xm` varchar(20) NOT NULL default '',
  `sfzhm` varchar(20) NOT NULL default '',
  `used` varchar(5) NOT NULL default '0',
  `nianji` varchar(4) NOT NULL default '2008',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=gbk COMMENT='2008' AUTO_INCREMENT=4932 ;

然后是数据导入,多多利用excel以及ultraedit

1
2
INSERT INTO `cdb_students_2007` (`id`, `zkzhm`, `xm`, `sfzhm`, `used`, `nianji`) VALUES 
(2, '07110101153058', '闫祎', '110101198903014010', '0', '2007');
分类: Mysql, Web 标签: