工作,学习,生活,这里将会有一些记录. 备用域名:http://meisw.wdlinux.cn 注册 | 登陆
浏览模式: 标准 | 列表分类:mysql/db

mysql快速清除清空某表内容的方法

SQL语句如下

TRUNCATE TABLE '表名'

比delete快,同时释放了空间,不能按条件删除

delete未释放空间,可按条件删除

delete 数据可以回滚,truncate 不可恢复

用mysqlsla来帮助分析慢查询日志

hackmysql.com推出的一款MySQL的日志分析工具

整体来说, 功能非常强大. 数据报表,非常有利于分析慢查询的原因, 包括执行频率, 数据量, 查询消耗等.

格式说明如下:

总查询次数 (queries total), 去重后的sql数量 (unique)

输出报表的内容排序(sorted by)

最重大的慢sql统计信息, 包括 平均执行时间, 等待锁时间, 结果行的总数, 扫描的行总数.

Count, sql的执行次数及占总的slow log数量的百分比.

Time, 执行时间, 包括总时间, 平均时间, 最小, 最大时间, 时间占到总慢sql时间的百分比.

95% of Time, 去除最快和最慢的sql, 覆盖率占95%的sql的执行时间.

Lock Time, 等待锁的时间.

95% of Lock , 95%的慢sql等待锁时间.

Rows sent, 结果行统计数量, 包括平均, 最小, 最大数量.

Rows examined, 扫描的行数量.

Database, 属于哪个数据库

Users, 哪个用户,IP, 占到所有用户执行的sql百分比

Query abstract, 抽象后的sql语句

Query sample, sql语句

除了以上的输出, 官方还提供了很多定制化参数, 是一款不可多得的好工具.

安装和使用也非常简单
安装:

tar zxf http://hackmysql.com/scripts/mysqlsla-2.03.tar.gz
cd mysqlsla-2.03
perl Makefile.PL
make
make install

简单使用:

— Slow log: mysqlsla -lt slow slow.log

— General log: mysqlsla -lt general general.log

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

mysqlsla会自动判断日志类型,缺省会打印出前十条结果,可以通过类似“–top 100”的参数来修改,如果觉得每次输入麻烦,还可以建立一个配置文件“~/.mysqlsla”,在文件里写上:top=100,这样就不用每次都手动输入参数了。

有关Mysql Errno:24的解决方案

100710 10:35:49 [ERROR] /www/servers/mysql/libexec/mysqld: Can't open file: './ix/ecm_sessions.frm' (errno: 24)
100710 10:35:49 [ERROR] /www/servers/mysql/libexec/mysqld: Can't open file: './ix/ecm_sessions.frm' (errno: 24)
100710 10:35:49 [ERROR] /www/servers/mysql/libexec/mysqld: Can't open file: './ix/ecm_sessions.frm' (errno: 24)

A.2.17. 文件未找到

如果遇到“ERROR '...'未发现(errno: 23)”无法打开文件:... (errno: 24)”,或来自MySQL的具有errno 23errno 24的其它错误,它表示未为MySQL服务器分配足够的文件描述符。你可以使用perror实用工具来了解错误编号的含义:

shell> perror 23
错误代码23:文件表溢出
shell> perror 24
错误代码24:打开文件过多
shell> perror 11
错误代码11:资源暂时不可用

这里的问题是,mysqld正试图同时打开过多的文件。你可以通知mysqld不要一次打开过多文件,或增加mysqld可用文件描述符的数目。

要想通知mysqld将一次打开的文件控制在较小的数目上,可降低table_cache系统变量的值(),从而减少表高速缓冲(默认值为64)。降低max_connections的值也能降低打开文件的数目(默认值为100)。

要想更改mysqld可用的文件描述符的数目,可在mysqld_safe上使用“--open-files-limit”选项或设置(自MySQL 3.23.30开始)open_files_limit系统变量。请参见5.3.3节,“服务器系统变量”。设置这些值的最简单方式是在选项文件中增加1个选项。请参见4.3.2节,“使用选项文件”。如果mysqld的版本较低,不支持设置打开文件的数目,可编辑mysqld_safe脚本。在脚本中有1个注释掉的行ulimit -n 256。你可以删除#’字符取消对该行的注释,更改数值256,以设置mysqld可用的文件描述符数目。

“--open-files-limit”ulimit能够增加文件描述符的数目,但最高不能超过操作系统限制的数目。此外还有1个“硬”限制,仅当以根用户身份启动mysqld_safemysqld时才能覆盖它(请记住,在该情况下,还需使用“--user”选项启动服务器,以便在启动后不再以根用户身份继续运行)。如果需要增加操作系统限制的对各进程可用文件描述符的数目,请参阅系统文档。

注释:如果运行tcsh shellulimit不工作!请求当前限制值时,tcsh还能通报不正确的值。在该情况下,应使用sh启动mysqld_safe

来自mysql手册 http://dev.mysql.com/doc/refman/5.1/zh/problems.html

 

此次修改了 max_connections,将其原来的500减小到200,正常

问题的原因,可能是其它人修改了配置,开始时连mysql都启动不了,在日志里,有比较多的如

100710 10:08:58 [ERROR] /www/servers/mysql-5.1.47/libexec/mysqld: Table './mysql/db' is marked as crashed and last (automatic?)
repair failed 

100710 10:08:58 [ERROR] Fatal error: Can't open and lock privilege tables: Table './mysql/db' is marked as crashed and last (aut
omatic?) repair failed

开始以为是mysql的数据表文件坏了,且又修复不了,便重新安装了份mysql的库文件,再恢复相关的用户表,后可以启动了,但仍很多上面提示的 Can't open file,再google后,再调整,正常

 

mysql 64位 segmentation fault

源码编译,5.1, 5.0的都试过,系统是CentOS5.4

不管怎么编译,结果都是

[root@localhost mysql-5.1.44]# /usr/local/mysql/bin/mysql
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.1.44-log Source distribution

Segmentation fault

 

tail /var/log/messages
Feb 22 11:26:28 localhost kernel: mysql[2883]: segfault at fffffffff347c6c0 rip 000000000041c001 rsp 00007ffff347be80 error 4
Feb 22 11:36:24 localhost kernel: mysql[18627]: segfault at ffffffffcef603e0 rip 000000000041c001 rsp 00007fffcef5fba0 error 4
Feb 22 11:36:37 localhost kernel: mysql[18632]: segfault at ffffffffe0e70df0 rip 000000000041c001 rsp 00007fffe0e705b0 error 4

好奇怪,用系统自带的又行,而且,只是mysql客户端有问题,其它的一切正常,能启动,能用

早二三个月也遇到一次,但当时没具体深究原因,好像是ncurses原理,后也不知怎么弄好了

后安装ncurses库,再编译就可以了,估计上次也是,只是当时没有留意

mysql热备

http://database.51cto.com/art/200510/8434.htm
http://imysql.cn/node/56
http://yemaosheng.com/?p=86


setup

要求mysql的版本比较接近

master my.cnf
[mysqld]
log-bin
server-id=1

master
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%.mydomain.com' IDENTIFIED BY 'slavepass';

restart mysql;

FLUSH TABLES WITH READ LOCK;

tar zcvf mysql-snapshot.tar.gz .

cp tar.gz to slave

tar zxvf tar.gz

show master status;

UNLOCK TABLES;

slave my.cnf
[mysqld]
server-id=slave_id

slave
CHANGE MASTER TO MASTER_HOST='master_host_name',MASTER_USER='replication_user_name',MASTER_PASSWORD='replication_password',MASTER_LOG_FILE='recorded_log_file_name',MASTER_LOG_POS=recorded_log_position;

start slave;

 

mysql 部分参数

含义如下:
aborted_clients 客户端非法中断连接次数
aborted_connects 连接mysql失败次数
com_xxx xxx命令执行次数,有很多条
connections 连接mysql的数量
Created_tmp_disk_tables 在磁盘上创建的临时表
Created_tmp_tables 在内存里创建的临时表
Created_tmp_files 临时文件数
Key_read_requests The number of requests to read a key block from the cache
Key_reads The number of physical reads of a key block from disk
Max_used_connections 同时使用的连接数
Open_tables 开放的表
Open_files 开放的文件
Opened_tables 打开的表
Questions 提交到server的查询数
Sort_merge_passes 如果这个值很大,应该增加my.cnf中的sort_buffer值
Uptime 服务器已经工作的秒数


提升性能的建议:
1.如果opened_tables太大,应该把my.cnf中的table_cache变大
2.如果Key_reads太大,则应该把my.cnf中key_buffer_size变大.可以用Key_reads/Key_read_requests计算出cache失败率
3.如果Handler_read_rnd太大,则你写的SQL语句里很多查询都是要扫描整个表,而没有发挥索引的键的作用
4.如果Threads_created太大,就要增加my.cnf中thread_cache_size的值.可以用Threads_created/Connections计算cache命中率
5.如果Created_tmp_disk_tables太大,就要增加my.cnf中tmp_table_size的值,用基于内存的临时表代替基于磁盘的

mysql 编译参数

CFLAGS="-O3" CXX=gcc CXXFLAGS="-O3 -felide-constructors -fno-exceptions -fno-rtti" ./configure --prefix=/servers/mysql --enable-assembler --with-mysqld-ldflags=-all-static --enable-thread-safe-client --with-extra-charsets=gb2312,gbk,utf8,latin1

 

#设置一下 CFLAGS 和 CXXFLAGS,尤其要注意打开 HAVE_DLOPEN 选项
CFLAGS='-O2 -DHAVE_DLOPEN -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector -param=ssp-buffer-size=4 -m64 -mtune=generic'
CXXFLAGS='-O2 -DHAVE_DLOPEN -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector -param=ssp-buffer-size=4 -m64 -mtune=generic'

./configure --prefix=/usr/local/mysql5137 --with-extra-charsets=gb2312,gbk,utf8,latin1 --enable-thread-safe-client \
--with-embedded-server --with-plugins=innobase,archive --with-big-tables --disable-shared --without-man \
--with-mysqld-ldflags=-all-static --with-named-curses-libs=/usr/lib/libncursesw.so.5
make;make install-strip

CC=gcc CFLAGS="-O2" CXX=gcc CXXFLAGS="-O2 -felide-constructors -fno-exceptions -fno-rtti" ./configure --prefix=/www/servers/mysql --with-extra-charsets=gb2312,gbk,utf8,latin1 --enable-thread-safe-client --with-embedded-server --with-plugins=innobase,archive --with-big-tables --disable-shared --with-named-curses-libs=/usr/lib/libncursesw.so.5

20100423

./configure '--prefix=/www/servers/mysql51' '--enable-assembler' '--enable-thread-safe-client' '--with-extra-charsets=gb2312,gbk,utf8,latin1' '--with-named-curses-libs=/usr/lib/libncursesw.so.5' '--without-debug' '--with-embedded-server'

 

CFLAGS="-O3 -march=pentiumpro" CXX=gcc CXXFLAGS="-O3 -march=pentiumpro -felide-constructors -fno-exceptions -fno-rtti" ./configure --prefix=/www/servers/mysql51 --enable-static --enable-assembler --enable-thread-safe-client --with-extra-charsets=gb2312,gbk,utf8,latin1 --with-named-curses-libs=/usr/lib/libncursesw.so.5 --without-debug --with-embedded-server --with-unix-socket-path=/tmp/mysql51.sock --with-pthread --without-innodb


--with-mysqld-ldflags=-all-static

mysql:Table is already up to date

在mysql表损坏时,用phpmyadmin or mysqlcheck 等修复,都提示 Table is already up to date.但数据表仍无法正常使用.

myisamchk --safe-recover db/table.MYI

Records:5912345678