MySQL 复制集群动态添加 slave

2009-08-13 9:37  |  分类:存储备份, 数据库

MySQL 数据文件需要存放在 LVM 逻辑卷上才能进行如下操作。

创建快照:
master 作为源:

## 对 master 进行读锁定
mysql> flush tables with read lock;

## 在新终端中(退出锁会失效)创建 MySQL 数据 逻辑卷 的快照
modprobe dm-snapshot
lvcreate -l 486 -s -n mysql_snap /dev/vg/mysql

## 记录当前 binlog 名称及 POS
mysql> show master status;
+------------------+-----------+
| File             | Position  |
+------------------+-----------+
| mysql-bin.000018 | 235667001 |
+------------------+-----------+

## 解锁
mysql> unlock tables;

slave 作为源:
全文阅读 »

准备所需的软件:
读写分离脚本是由 lua 语言编写的,需要安装 lua
http://www.lua.org/
下载适合的 MySQL-Proxy 版本
http://mysql.cdpa.nsysu.edu.tw/Downloads/MySQL-Proxy/

安装依赖的库:
yum -y install readline-devel
Installing for dependencies: libtermcap-devel

安装 lua:
tar zxvf lua-5.1.3.tar.gz
cd lua-5.1.3
make linux
make install

安装 MySQL-Proxy:
tar zxvf mysql-proxy-0.6.1-linux-rhel4-x86-32bit.tar.gz
cd mysql-proxy-0.6.1-linux-rhel4-x86-32bit
mv sbin/mysql-proxy /usr/local/sbin/
mv share/mysql-proxy /usr/local/share/
strip /usr/local/sbin/mysql-proxy
全文阅读 »

iconv 解决 MySQL 乱码问题

2006-07-27 17:03  |  分类:数据库

从 Windows 下的 MySQL 导出的 sql 文件再导入到 Linux 下的 MySQL ,所有字段的中文内容都变成了乱码。
 
$ file -i sql1.sql
sql1.sql: text/plain; charset=utf-8
 
发现 sql 文件的编码是 utf-8 ,这与 Linux 下 MySQL 数据库默认的 gbk 编码不相符。
 
$ iconv -f utf-8 -t gbk -o sql2.sql sql1.sql
生成编码为 gbk 的 sql 文件再导入就可以了。
 
不过,发现个问题:
$ file -i sql2.sql
sql2.sql: text/plain; charset=unknown
 
看来,file 不支持 gbk 编码。

mtop 实时监控 MySQL

2006-07-17 11:30  |  分类:数据库

Requires the following perl modules:
 
    Module             Available At
    ------------     --------------------------------------------------------
    Curses              http://cpan.linuxforum.net/authors/id/G/GI/GIRAFFED
    DBI                  Distributed as Bundle::DBI: http://www.cpan.org/authors/id/TIMB
    DBD::mysql        http://www.cpan.org/modules/by-module/DBD
    Getopt::Long     (Distributed with Perl 5)
    Net::Domain      Part of libnet: http://www.cpan.org/authors/id/GBARR

# perl -e 'use Curses'
# perl -e 'use DBI'
# perl -e 'use DBD::mysql'
# perl -e 'use Getopt::Long'
# perl -e 'use Net::Domain'
 
没有输出就是模块已经安装了,有错误就是相应的模块没有安装。
可以在上面给出的地址下载相应模块的最新版本。
全文阅读 »

MySQL 的 interactive timeout 缺省设置为 28800 秒,这个值实在太大了,根据程序与数据库交互的状况把这个值改小了,结果使用 MySQL 4.0 的 ProFTPD 频繁断线。
SHOW PROCESSLIST;
发现操作 ProFTPD 数据库进程的运行时间在不停增加,直到达到 interactive timeout 参数定义的时间后才断开,这时,客户端与 ProFTPD 的连接也就断开了。
 
其它使用 MySQL 4.1 的 ProFTPD 没有这样的问题,看不到操作 ProFTPD 数据库的进程。(ProFTPD 的版本都是相同的)
 
也就是说,ProFTPD 使用 MySQL 4.0 验证用户时是建立的“持久”连接,只要客户端有操作就会去查询数据库,对客户端身份进行验证;而在使用 MySQL 4.1 时,只是在登陆时查询数据库验证身份,成功登陆后便由 ProFTPD 自己维护这个 session ,不再查询数据库了。
 
修改 MySQL 4.0 的  interactive timeout ,改为和 ProFTPD 设定的 TimeoutIdle 时间同一值后解决问题。