正在加载...
分页: 8/13 第一页 上页 3 4 5 6 7 8 9 10 11 12 下页 最后页 [ 显示模式: 摘要 | 列表 ]

Mysql读写分离

[ 2009/06/18 03:09 | by selboo ]
安装pkg-config:

tar zxvf pkg-config-0.23.tar.gz
cd pkg-config-0.23
./configure
make
make install

确保PKG_CONFIG_PATH环境变量包含了相关的pkg-config配置文件路径:

export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig

安装libevent:

tar zxvf libevent-1.4.10-stable.tar.gz
cd libevent-1.4.10-stable
./configure
make
make install

安装glib:

tar zxvf glib-2.20.0.tar.gz
cd glib-2.20.0
./configure
make
make install

1、 LUA的安装
[root@localhost ~]#tar zxvf lua-5.1.2.tar.gz  -C /usr/local
[root@localhost ~]# cd /usr/local/
[root@localhost local]# mv lua-5.1 lua
[root@localhost lua]# cd lua
[root@localhost lua]#make local;make install;
    导出环境变量:
[root@localhost lua]#export LUA_CFLAGS="-I/usr/local/include" LUA_LIBS="-L/usr/local/lib -llua -ldl" LDFLAGS="-lm"

1. 安装
下载已经编译好的安装包,或者预编译安装包均可,在这里,使用预编译版本。

[@s1.yejr.com ~]# tar zxf mysql-proxy-0.6.0-linux-rhas4-x86.tar.gz
[@s1.yejr.com ~]# cd mysql-proxy-0.6.0-linux-rhas4-x86

#可以看到有2个目录
[@s1.yejr.com mysql-proxy-0.6.0-linux-rhas4-x86]# ls
sbin  share
[@s1.yejr.com mysql-proxy-0.6.0-linux-rhas4-x86]# mv sbin/mysql-proxy /usr/local/sbin/
[@s1.yejr.com mysql-proxy-0.6.0-linux-rhas4-x86]# ls share
mysql-proxy         tutorial-constants.lua  tutorial-packets.lua     tutorial-rewrite.lua  tutorial-warnings.lua
tutorial-basic.lua  tutorial-inject.lua     tutorial-query-time.lua  tutorial-states.lua

#将lua脚本放到/usr/local/share下,以备他用
[@s1.yejr.com mysql-proxy-0.6.0-linux-rhas4-x86]# mv share/mysql-proxy /usr/local/share/

#删除符号连接等垃圾代码
[@s1.yejr.com mysql-proxy-0.6.0-linux-rhas4-x86]# strip /usr/local/sbin/mysql-proxy

2. 启动
编译一下启动管理脚本:

[@s1.yejr.com ~]# vi /etc/init.d/mysql-proxy
#!/bin/sh
export LUA_PATH=/usr/local/share/mysql-proxy/?.lua

mode=$1
if [ -z "$mode" ] ; then
  mode="start"
fi

case $mode in
  'start')
    mysql-proxy --daemon \
--admin-address=:4401 \
--proxy-address=:3307 \
--proxy-backend-addresses=:3306 \
--proxy-read-only-backend-addresses=192.168.133.232:3306 \
--proxy-read-only-backend-addresses=10.10.74.61:3306 \
--proxy-lua-script=/usr/local/share/mysql-proxy/rw-splitting.lua
    ;;

  'stop')
    killall mysql-proxy
    ;;

  'restart')
    if $0 stop ; then
      $0 start
    else
      echo  "retart failed!!!"
      exit 1
    fi
    ;;
esac
exit 0


现在解释一下启动脚本:
--daemon 采用daemon方式启动
--admin-address=:4401 指定mysql proxy的管理端口,在这里,表示本机的4401端口
--proxy-address=:3307 指定mysql proxy的监听端口,也可以用 127.0.0.1:3307 表示
--proxy-backend-addresses=:3306 指定mysql主机的端口
--proxy-read-only-backend-addresses=192.168.1.1:3306 指定只读的mysql主机端口
--proxy-read-only-backend-addresses=192.168.1.2:3306 指定另一个只读的mysql主机端口
--proxy-lua-script=/usr/local/share/mysql-proxy/rw-splitting.lua 指定lua脚本,在这里,使用的是rw-splitting脚本,用于读写分离

完整的参数可以运行以下命令查看:

mysql-proxy --help-all

运行以下命令启动/停止/重启mysql proxy:

[@s1.yejr.com ~]# /etc/init.d/mysql-proxy start
[@s1.yejr.com ~]# /etc/init.d/mysql-proxy stop
[@s1.yejr.com ~]# /etc/init.d/mysql-proxy restart

3. 试用

[@s1.yejr.com ~]# mysql -h127.0.0.1 -uroot -P3307

mysql> show processlist;
+-------+------+----------------+------+---------+------+-------+------------------+
| Id    | User | Host           | db   | Command | Time | State | Info             |
+-------+------+----------------+------+---------+------+-------+------------------+
| 30052 | root | localhost:9656 | NULL | Query   |    0 | NULL  | show processlist |
+-------+------+----------------+------+---------+------+-------+------------------+

可以看到,产生了一个新连接。

用sysbench测试一下,看会不会挂掉:

[@s1.yejr.com ~]# sysbench --test=oltp --mysql-table-engine=innodb --oltp-table-size=1000000 \
--mysql-socket=/tmp/mysql.sock --mysql-user=root --mysql-db=test prepare

[@s1.yejr.com ~]# sysbench --test=oltp --mysql-table-engine=innodb --oltp-table-size=1000000 \
--mysql-socket=/tmp/mysql.sock --mysql-user=root --mysql-db=test run
.........
.........
Threads fairness:
    events (avg/stddev):           10000.0000/0.00
    execution time (avg/stddev):   23.0387/0.00

4. 其他
mysql proxy还可以实现连接池的功能,这在很多LAMP开发中是软肋,因此,有了mysql proxy,就可以不用再担心连接数超限的问题了。
如果使用rw-splitting.lua脚本的话,最好修改以下2个参数的默认值:

min_idle_connections = 1
max_idle_connections = 3

Mysql 数据引擎转换

[ 2009/05/20 10:21 | by selboo ]
      从MySQL 5.x起,MySQL已经自带一个PERL工具。此工具可以批量转换MYSQL的表的引擎,这个工具对于批量转换表的朋友就比较好用啦,工具为mysql_convert_table_format,如果是RPM安装一般在/usr/bin 或者/usr/sbin下。源码安装的朋友可能就在你自己定义的目录—basedir/bin下。我的为/usr/local/mysql/bin,其实mysql_convert_table_format的帮助文件已经非常详细啦!方便自己,也给象我一样比较懒的人啰,就当把帮助文档翻译一下啰,本人英文水平还处在小学水平,欢迎拍砖

[root@test ~]# mysql_convert_table_format
/usr/sbin/mysql_convert_table_format
version 1.1

Conversion of a MySQL tables to other table types.
转换MYSQL 表成其它表的类型
如:INNODB ,MEMORY等
l
Usage: /usr/sbin/mysql_convert_table_format database [tables]

用法: /usr/sbin/mysql_convert_table_format 数据库名
表名,也就是可以单独指定全库,或者全表,类似mysqldump

If no tables has been specifed, all tables in the database will be converted.

如果没指定表,那么数据库中的所有表将会被转换
The following options are available:

–force
Continue even if there is some error.

如果碰到错误强制进行转换
–help or –Information
Shows this help
查看帮助

–host=’host name’ (Default localhost)
Host name where the database server is located.

转换的主机名,默认为本地主机(localhost)

–password=’password’
Password for the current user.

当前进行转换用户的密码

–port=port
TCP/IP port to connect to if host is not “localhost”.

如果不是以localhost 连接的话,请指定端口

–socket=’/path/to/socket’
Socket to connect with.

SOCKET文件存在的位置(SOCKET是进程间通信所用到的)

–ENGINE=’table-type’
Converts tables to the given table type (Default: myisam)
MySQL 3.23 supports at least the BDB, ISAM and MYISAM types.

存储引擎,默认为MYISAM,这里要注意,我测试的时候,要修改这个PERL脚本,如果你把库转成INNODB,就在脚本里把MYISAM写成INNODB,其它类同,我也不清楚用这个参数指定为什么不行,本人对PERL也就能看懂一些,没学过程序开发,也没做过程序员,水平也不怎么样!所以,如果谁有更好的方法,或者改良一下这个脚本应该是可以的。

–user=’user_name’
User name to log into the SQL server.

连接的用户名

–verbose
This is a test specific option that is only used when debugging a test.
Print more information about what is going on.


–version
Shows the version of this program.
查看工具的版本信息



用法:我是用本机进行测试,OS:RHEL5.2 MYSQL:5.1.30

mysql_convert_table_format mo –user=’root’ –password=’mysql’ –force –socket=’/tmp/mysql.sock’

把数据库mo中的所有表转换成MYISAM引擎
查看数据文件目录
[root@test ~]# ll /opt/mysql-data/mo/
总计 960
-rw-rw—- 1 mysql mysql 12914 03-02 22:55 action_log.frm
-rw-rw—- 1 mysql mysql
8900 03-02 22:55 alarm_log.frm
-rw-rw—- 1 mysql mysql
8898 03-02 22:55 check_data.frm
-rw-rw—- 1 mysql mysql
8836 03-02 22:55 check_data_log.frm
-rw-rw—- 1 mysql mysql
1708 03-02 22:55 check_data_log.par
-rw-rw—- 1 mysql mysql
8898 03-02 22:55 check_data_tmp.frm
-rw-rw—- 1 mysql mysql
9096 03-02 22:55 checkpoint.frm
…………………………………….


只有表的结构文件,看看表空间有没有增长啰
[root@test ~]# ll -lh /opt/mysql-data/ib*
-rw-rw—- 1 mysql mysql
34M 03-02 23:18 /opt/mysql-data/ibdata1
-rw-rw—- 1 mysql mysql 5.0M 03-02 23:18 /opt/mysql-data/ib_logfile0
-rw-rw—- 1 mysql mysql 5.0M 12-22 20:19 /opt/mysql-data/ib_logfile1

默认没有用INNODB的是10M,现在我的变成30多M啦

修改工具
把MYISAM修改成INNODB
Vi /usr/local/mysql/bin/mysql_convert_table_format
把第26行 $opt_type=”innodb” 改成$opt_type=”myisam”

用工具进行库的转换

[root@test ~]# mysql_convert_table_format mo –user=’root’ –password=’mysql’ –socket=’/tmp/mysql.sock’
[root@test ~]#

成功完成。。在看看数据文件啰

总计 2568
-rw-rw—- 1 mysql mysql 12914 03-02 23:18 action_log.frm
-rw-rw—- 1 mysql mysql
0 03-02 23:18 action_log.MYD
-rw-rw—- 1 mysql mysql
1024 03-02 23:18 action_log.MYI
-rw-rw—- 1 mysql mysql
8900 03-02 23:18 alarm_log.frm
-rw-rw—- 1 mysql mysql
0 03-02 23:18 alarm_log.MYD
-rw-rw—- 1 mysql mysql
1024 03-02 23:18 alarm_log.MYI
-rw-rw—- 1 mysql mysql
8898 03-02 23:18 check_data.frm
-rw-rw—- 1 mysql mysql
8836 03-02 23:18 check_data_log.frm
-rw-rw—- 1 mysql mysql
1708 03-02 23:18 check_data_log.par
-rw-rw—- 1 mysql mysql
0 03-02 23:18 check_data_log#P#p0.MYD
-rw-rw—- 1 mysql mysql
1024 03-02 23:18 check_data_log#P#p0.MYI
-rw-rw—- 1 mysql mysql
0 03-02 23:18 check_data_log#P#p100.MYD
-rw-rw—- 1 mysql mysql
1024 03-02 23:18 check_data_log#P#p100.MYI
-rw-rw—- 1 mysql mysql
0 03-02 23:18 check_data_log#P#p101.MYD
-rw-rw—- 1 mysql mysql
1024 03-02 23:18 check_data_log#P#p101.MYI
-rw-rw—- 1 mysql mysql
0 03-02 23:18 check_data_log#P#p102.MYD
-rw-rw—- 1 mysql mysql
1024 03-02 23:18 check_data_log#P#p102.MYI
-rw-rw—- 1 mysql mysql
0 03-02 23:18 check_data_log#P#p103.MYD
-rw-rw—- 1 mysql mysql
1024 03-02 23:18 check_data_log#P#p103.MYI
-rw-rw—- 1 mysql mysql
0 03-02 23:18 check_data_log#P#p104.MYD
-rw-rw—- 1 mysql mysql
1024 03-02 23:18 check_data_log#P#p104.MYI
-rw-rw—- 1 mysql mysql
0 03-02 23:18 check_data_log#P#p105.MYD
-rw-rw—- 1 mysql mysql
1024 03-02 23:18 check_data_log#P#p105.MYI
-rw-rw—- 1 mysql mysql
0 03-02 23:18 check_data_log#P#p106.MYD
-rw-rw—- 1 mysql mysql
1024 03-02 23:18 check_data_log#P#p106.MYI
-rw-rw—- 1 mysql mysql
0 03-02 23:18 check_data_log#P#p107.MYD
-rw-rw—- 1 mysql mysql
1024 03-02 23:18 check_data_log#P#p107.MYI
-rw-rw—- 1 mysql mysql
0 03-02 23:18 check_data_log#P#p108.MYD
-rw-rw—- 1 mysql mysql
1024 03-02 23:18 check_data_log#P#p108.MYI
-rw-rw—- 1 mysql mysql
0 03-02 23:18 check_data_log#P#p109.MYD
-rw-rw—- 1 mysql mysql
1024 03-02 23:18 check_data_log#P#p109.MYI
-rw-rw—- 1 mysql mysql
0 03-02 23:18 check_data_log#P#p10.MYD

已经成功转换成MYISAM引擎啰
验证数据的正确性我就不贴出来了,我已经验证过了,不会有数据的丢失,其实脚本也就是批量执行
ALTER TABLE $TABLE_NAME ENGINE=$ENGINE
的动作

mysql忘记root密码怎么办?

[ 2009/05/08 19:00 | by selboo ]
把mysql的root密码给忘了

在liunux下先停掉mysql服务器

然后用–skip-grant-table参数重启动mysql的服务器

然后在shell下用mysql -u root进去修改root用户的密码就可以了

其实挺简单的
HOHO

windows下的原理也差不多

mysqld_safe启动mysql服务器时也是可以加那个参数的
Tags:

my.cnf 中文版

[ 2009/05/08 18:59 | by selboo ]
#BEGIN CONFIG INFO
#DESCR: 4GB RAM, 只使用InnoDB, ACID, 少量的连接, 队列负载大
#TYPE: SYSTEM
#END CONFIG INFO

#
# 此mysql配置文件例子针对4G内存
# 主要使用INNODB
#处理复杂队列并且连接数量较少的mysql服务器
#
# 将此文件复制到/etc/my.cnf 作为全局设置,
# mysql-data-dir/my.cnf 作为服务器指定设置
# (@localstatedir@ for this installation) 或者放入
# ~/.my.cnf 作为用户设置.
#
# 在此配置文件中, 你可以使用所有程序支持的长选项.
# 如果想获悉程序支持的所有选项
# 请在程序后加上”–help”参数运行程序.
#
# 关于独立选项更多的细节信息可以在手册内找到
#

#
# 以下选项会被MySQL客户
Tags:
网上有很多的文章教怎么配置MySQL服务器,但考虑到服务器硬件配置的不同,具体应用的差别,那些文章的做法只能作为初步设置参考,我们需要根据自己的情况进行配置优化,好的做法是MySQL服务器稳定运行了一
Tags: ,
分页: 8/13 第一页 上页 3 4 5 6 7 8 9 10 11 12 下页 最后页 [ 显示模式: 摘要 | 列表 ]