分类目录归档:数据库

数据库管理员

mysql的netstat 时很多的连接的解决办法

刚看服务器出现大量的TIME_WAIT链接

netstat -an
192.168.12.13:3306 192.168.12.12:30443 TIME_WAIT
192.168.12.13:3306 192.168.12.12:30444 TIME_WAIT
192.168.12.13:3306 192.168.12.12:30445 TIME_WAIT
192.168.12.13:3306 192.168.12.12:30446 TIME_WAIT
192.168.12.13:3306 192.168.12.12:30447 TIME_WAIT
192.168.12.13:3306 192.168.12.12:30448 TIME_WAIT
192.168.12.13:3306 192.168.12.12:30449 TIME_WAIT
192.168.12.13:3306 192.168.12.12:30450 TIME_WAIT
192.168.12.13:3306 192.168.12.12:30451 TIME_WAIT
192.168.12.13:3306 192.168.12.12:30452 TIME_WAIT

技术不太好,赶忙google
看到有很多前辈给出了解决方法
编辑/etc/sysctl.conf添加如下内容
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 30
然后执行 /sbin/sysctl -p 让刚添加的内容生效

解释下:
net.ipv4.tcp_syncookies = 1 表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭;

net.ipv4.tcp_tw_reuse = 1 表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;

net.ipv4.tcp_tw_recycle = 1 表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。

net.ipv4.tcp_fin_timeout 修改系統默认的 TIMEOUT 时间

再次用netstat -an 查看
发现大量的TIME_WAIT已经不存在了。

xfs,数据库mysql优化

准备尝试一下

xfs和Ext4最近学习文件系统,先要搞明白如何把分区格式化成相应的格式。

如果是xfs,需要安装 XFSprogs

如果是Ext4,需要安装e4fsprogs

对于ubuntu,比较好办,默认就已经搞定。但是Centos,就需要安装,xfs官方的源里都是没有的。

root@cloud:~# mkfs.xfs -f /dev/sdb1
meta-data=/dev/sdb1 isize=256 agcount=4, agsize=122009214 blks
= sectsz=512 attr=2, projid32bit=0
data = bsize=4096 blocks=488036855, imaxpct=5
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0
log =internal log bsize=4096 blocks=238299, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0

# mkfs.ext /dev/sdb1
mkfs.ext2 mkfs.ext3 mkfs.ext4 mkfs.ext4dev
root@cloud:~# mkfs.ext4 /dev/sdb1
mke2fs 1.41.14 (22-Dec-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
122011648 inodes, 488036855 blocks
24401842 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=4294967296
14894 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,
102400000, 214990848

Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 35 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.

http://hi.baidu.com/chenshake/blog/item/b2b0eb246407412e8644f93c.html

mysql优化工具,profiler,服务器维护时会经常用到

Query Profiler可以定位出一条SQL语句执行的各种资源消耗情况,比如CPU,IO等,以及该SQL执行所耗费的时间等。该工具只有在MYSQL 5.0.37以及以上版本中才有实现
默认的情况下,MYSQL的该功能没有打开,需要自己手动启动。可以通过如下方法查看当前mysql服务器是否开启了该功能。

mysql> show variables like ‘%profiling%’;
+————————+——-+
| Variable_name | Value |
+————————+——-+
| profiling | OFF |
| profiling_history_size | 15 |
+————————+——-+
继续阅读

mysql5.5.8源码安装,使用cmake,真不习惯。

mysql5.5.8源码编译安装

wget http://www.cmake.org/files/v2.8/cmake-2.8.3.tar.gz
tar -zxvf cmake-2.8.3.tar.gz
cd cmake
./configure
make
make install

mysql5.5.8源代码编译安装的选项
cmake程序提供了一个强大的配置mysql源代码的方法,典型的,你应该在cmake的命令行使用下面的选项
,cmake支持下面的选项信息,应该在mysql的源代码的顶级目录使用这些选项。
[root@localhost mysql-5.5.8]# cmake . -LH
[root@localhost mysql-5.5.8]# cmake .
你可以影响cmake的某些环境变量
下面是一些cmake的一些有用的选项。
CMAKE_INSTALL_PREFIX mysql的安装路径,默认为/usr/local/mysql5.5.8
DEFAULT_CHARSET 默认的服务器编码,设置latin1, 5.5.7
DEFAULT_COLLATION 也是关于编码的
MYSQL_DATADIR data目录
MYSQL_TCP_PORT TCP/IP端口,3306
MYSQL_UNIX_ADDR unix的socket文件,默认/tmp/mysql.sock
WITH_xxx_STORAGE_ENGINE 编译静态的存储引擎xxx
WITHOUT_xxx_STORAGE_ENGINE Exclude storage engine xxx from build
WITH_EXTRA_CHARSETS 扩展字符集
WIHT_ZLIB zlib支持
我的编译参数:
[root@localhost mysql-5.5.8]# cmake -DCMAKE_INSTALL_PREFIX=/home/system/mysql -DDEFAULT_CHARSET=utf8 -DMYSQL_DATADIR=/home/db -DMYSQL_UNIX_ADDR=/tmp/mysql.sock .

# cmake -DMYSQL_DATADIR=/home/data
-DDEFAULT_CHARSET=utf8
-DDEFAULT_COLLATION=utf8_general_ci
-DEXTRA_CHARSETS=all
-DMYSQL_UNIX_ADDR=/base/MySQL/socket
-DMYSQL_TCP_PORT=3306
-DMYSQL_USER=mysql
-DCMAKE_INSTALL_PREFIX=/base/MySQL
-DINSTALL_SBINDIR=bin

CMake参数对照关系
–localstatedir=/base/MySQL/data     =========>   -DMYSQL_DATADIR=/base/MySQL/data
–with-charset=utf8    ====================>   -DDEFAULT_CHARSET=utf8
–with-collation=utf8_general_ci     ===========>   -DDEFAULT_COLLATION=utf8_general_ci
–with-extra-charsets=all      ================>   -DEXTRA_CHARSETS=all
–with-unix-socket-path=/base/MySQL/socket    ==>    -DMYSQL_UNIX_ADDR=/base/MySQL/socket
–with-tcp-port=3306      ==================>     -DMYSQL_TCP_PORT=3306
–with-mysqld-user=mysql    ===============>     -DMYSQL_USER=mysql
–prefix=/usr    ========================>     -DCMAKE_INSTALL_PREFIX=/base/MySQL
–sbindir=EPREFIX/sbin     ================>     -DINSTALL_SBINDIR=bin

    鸡鸡哥
    QQ:21428749
    http://www.hardwork.cn

13.2.9. TRUNCATE语法,删除大表,并释放空间

13.2.9. TRUNCATE语法
TRUNCATE [TABLE] tbl_name
TRUNCATE TABLE用于完全清空一个表。从逻辑上说,该语句与用于删除所有行的DELETE语句等同,但是在
有些情况下,两者在使用上有所不同。
对于InnoDB表,如果有需要引用表的外键限制,则TRUNCATE TABLE被映射到DELETE上;否则使用快速删减
(取消和重新创建表)。使用TRUNCATE TABLE重新设置AUTO_INCREMENT计数器,设置时不考虑是否有外
Chapter 13. SQL Statement Syntax
file:///D:/download/refman-5.1-zh.html-chapter/refman-5.1-zh.html-chapter/sql-syntax.html[2010/2/24 5:22:43]
键限制。
对于其它存储引擎,在MySQL 5.1中,TRUNCATE TABLE与DELETE FROM有以下几处不同:
· 删减操作会取消并重新创建表,这比一行一行的删除行要快很多。
· 删减操作不能保证对事务是安全的;在进行事务处理和表锁定的过程中尝试进行删减,会发生错误。
· 被删除的行的数目没有被返回。
· 只要表定义文件tbl_name.frm是合法的,则可以使用TRUNCATE TABLE把表重新创建为一个空表,即使
数据或索引文件已经被破坏。
· 表管理程序不记得最后被使用的AUTO_INCREMENT值,但是会从头开始计数。即使对
于MyISAM和InnoDB也是如此。MyISAM和InnoDB通常不再次使用序列值。
· 当被用于带分区的表时,TRUNCATE TABLE会保留分区;即,数据和索引文件被取消并重新创建,同时
分区定义(.par)文件不受影响。
TRUNCATE TABLE是在MySQL中采用的一个Oracle SQL扩展。

mysql查看表的大小

如果想知道MySQL数据库中每个表占用的空间、表记录的行数的话,可以打开MySQL的 information_schema 数据库。在该库中有一个 TABLES 表,这个表主要字段分别是:

TABLE_SCHEMA : 数据库名
TABLE_NAME:表名
ENGINE:所使用的存储引擎
TABLES_ROWS:记录数
DATA_LENGTH:数据大小
INDEX_LENGTH:索引大小

其他字段请参考MySQL的手册,我们只需要了解这几个就足够了。

所以要知道一个表占用空间的大小,那就相当于是 数据大小 + 索引大小 即可。

SQL:

SELECT TABLE_NAME,DATA_LENGTH+INDEX_LENGTH,TABLE_ROWS FROM TABLES WHERE TABLE_SCHEMA=’数据库名’ AND TABLE_NAME=’表名’

不停机做mysql主从

2.1:在A机器上mysqldump -uroot -p123 -E -R –master-data databasename>c:\0803.sql
得到备份文件
2.2:到B机器上还原mysql -uroot -p123 databasename<c:\0803.sql
2.3:用MORE命令,得到0803.SQL里的change master to 命令里的参数
2.4:在B里,STOP SLAVE,再CHANGE MASTER TO,再START SLAVE

g++: yes: No such file or directory mysql编译出错

configure 没问题

make时出错,最后有如下错误信息

g++: yes: No such file or directory

mysql官方说,configure时可以去掉–with-mysqld-libs,或者指定相关的路径什么的,我去掉后还是出错

后来去掉–with-named-curses-libs选项后,正常了