作者:田逸
通过主从复制,然后使用mysql-proxy实现
I mysql主从复制
(一)安装mysql(主从服务器皆相同) 先创建用户 useradd mysql -s /sbin/nologin
tar zxvf mysql-5.0.45.tar.gz
cd mysql-5.0.45
./configure --prefix=/usr/local/mysql --localstatedir=/opt/data --with-extra-charsets=utf8,gb2312,gbk --with-pthread --enable-thread-safe-client
注:配置过程指定数据文件的位置及另加的字符集.
make
make install
cp support-files/my-large.cnf /etc/my.cnf
cd /usr/local/mysqlchgrp -R mysql .
生成基本的数据库和表:
/usr/local/mysql/bin/mysql_install_db --user=mysql
成功执行后察看数据目录/opt/data,看是否有文件或目录生成.
chown -R mysql:mysql /opt/data
记得给每个数据库设置root密码.
(二)修改配置文件不同的地方就是server-id,主服务器配置文件不用修改,从服务器的配置文件server-id=10.其他的内容基本相同.
(三)启动服务/usr/local/mysql/bin/mysqld_safe --user=mysql& 这个过程主辅服务器都相同.
(四)授权(在主服务器上进行)GRANT REPLICATION SLAVE ON *.* to [url=mailto:]'rep1'@'192.168.8.100 identified by 'mylqs';
(五)查询主数据库状态(主服务器上进行)mysql> show master status;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000003 | 235 | | |
+------------------+----------+--------------+------------------+
记下file及position的值,后面做从服务器操作的时候需要用.
(六)配置从服务器 mysql> change master to master_host='192.168.8.101', master_user='rep1', master_password='mysql', master_log_file='mysql-bin.000003', master_log_pos=235;
正确执行后再执行:
mysql> start slave;
就启用了复制功能.这里我们运行一下 mysql> show slave status\G 来检查一下,一个正常的输出结果应该如下面的形式:
- mysql> show slave status\G
- *************************** 1. row ***************************
- Slave_IO_State: Waiting for master to send event
- Master_Host: 192.168.8.101
- Master_User: rep1
- Master_Port: 3306
- Connect_Retry: 60
- Master_Log_File: mysql-bin.000003
- Read_Master_Log_Pos: 235
- Relay_Log_File: -relay-bin.000009
- Relay_Log_Pos: 235
- Relay_Master_Log_File: mysql-bin.000003
- Slave_IO_Running: Yes
- Slave_SQL_Running: Yes
- Replicate_Do_DB:
- Replicate_Ignore_DB:
- Replicate_Do_Table:
- Replicate_Ignore_Table:
- Replicate_Wild_Do_Table:
- Replicate_Wild_Ignore_Table:
- Last_Errno: 0
- Last_Error:
- Skip_Counter: 0
- Exec_Master_Log_Pos: 235
- Relay_Log_Space: 235
- Until_Condition: None
- Until_Log_File:
- Until_Log_Pos: 0
- Master_SSL_Allowed: No
- Master_SSL_CA_File:
- Master_SSL_CA_Path:
- Master_SSL_Cert:
- Master_SSL_Cipher:
- Master_SSL_Key:
- Seconds_Behind_Master: 0
- 1 row in set (0.00 sec)
请注意:slave_IO进程及slave_SQL进程都必须正常运行,在状态输出重表现为: Slave_IO_Running: Yes 及Slave_SQL_Running: Yes否则都是不正确的状态(如一个值Yes,另外一个是NO则不行).
(七)主数据库有数据的情况:
1、数据库锁表操作,不让数据再进行写入动作。mysql> FLUSH TABLES WITH READ LOCK;
2、察看主数据库的状态 mysql> show master status; 照第(五)步记录输出值。
3、把主服务器数据文件复制到从服务器,最好先用tar处理一下。
4、取消主数据库锁定 mysql> UNLOCK TABLES;
5、从服务器的操作。跟前面的步骤一样(略过)
II mysql代理安装配置
一、安装mysql-proxy.
需要按下列顺序安装其所依赖的包:
(一)安装LUA
tar zxvf lua-5.1.tar.gz
cd lua-5.1
用vi修改Makefile,使"INSTALL_TOP=/usr/local/lua",这样做的目的是为了是lua的所有文件都安装在目录/usr/local/lua/
make posix
make install
(二)安装 libevent
tar zxvf libevent-1.1a.tar.gz
cd libevent-1.1a
./configure --prefix=/usr/local/libevent
make
make install
(三)安装check
tar zxvf check-0.8.4.tar.gz
cd check-0.8.4./configure
make
make install
(四)设置安装mysql-proxy所需的环境变量.把下面的内容追加到/etc/profile中
export LUA_CFLAGS="-I/usr/local/lua/include" LUA_LIBS="-L/usr/local/lua/lib -llua -ldl" LDFLAGS="-L/usr/local/libevent/lib -lm"
export CPPFLAGS="-I/usr/local/libevent/include"
export CFLAGS="-I/usr/local/libevent/include"
然后执行 source /etc/profile (安装完mysql-proxy不再需要这些变量,可以删除之)
(五)安装mysql(只安装mysql客户端即可)
tar zxvf mysql-5.0.45.tar.gz
cd mysql-5.0.45
./configure --prefix=/usr/local/mysql --without-server
make
make install
(六)安装mysql-proxy tar
zxvf mysql-proxy-0.5.0.tar.gz
cd mysql-proxy-0.5.0
./configure –prefix=/usr/local/mysql-proxy --with-mysql=/usr/local/mysql --with-lua
make
make install
二、主要的命令行选项
--help-all显示所有的帮助选项
--admin-address=host:port 管理主机及端口,默认是4041
--proxy-address=host:port 代理服务器的监听地址及端口,默认4040
--proxy-read-only-address=host:port 只读连接时,代理服务器的监听地址及端口。默认4042
--proxy-backend-addresses=host:port连接真实服务器的地址及监听端口,默认是3306,这是mysql代理最重要的选项,多个主机之间用空格隔开。使用rr算法。
--proxy-lua-script=file 指定lua脚本的名称
三、 使用方法
2个mysql服务器的情形
mysql-proxy --proxy-backend-addresses=mysql_ip1:3306 --proxy-backend-addresses=mysql_ip2:3306 |
| mysql-proxy --proxy-backend-addresses=<master_ip> :3306 --proxy-read-only-address=<slave_ip1>:3306 --proxy-read-only-address=<slave_ip2>:3306 |
1、主从复制测试:在主数据库服务器上创建库和表,然后再插入记录,再登陆到从服务器,看是否也建立相一致的库和表以及记录。
| mysql> create database first_db; Query OK, 1 row affected (0.01 sec) 在主数据库服务器创建库first_db mysql> create table first_tb(id int(3),name char(10)); Query OK, 0 rows affected (0.00 sec) 在主数据库服务器创建表first_db mysql> insert into first_tb values (001,'myself'); Query OK, 1 row affected (0.00 sec) 在主数据服务器的表first_db中插入记录 |
| mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | first_db | | mysql | | test | +--------------------+ 4 rows in set (0.01 sec) 数据库自动生成了 mysql> use first_db; Database changedmysql> show tables; +--------------------+ | Tables_in_first_db | +--------------------+ | first_tb | +--------------------+ 1 row in set (0.00 sec)表也自动生成了 mysql> select * from first_tb; +------+--------+ | id | name | +------+--------+ | 1 | myself | +------+--------+ 1 row in set (0.00 sec)记录也按照我们的意愿存在了 |
本日志由 flyinweb 于 2009-12-23 09:59:04 发表,目前已经被浏览 3678 次,评论 0 次;
作者添加了以下标签: mysql 读写分离;
引用通告:http://www.517sou.net/Article/362/Trackback.ashx
It is quite useful and interesting too.
VIRT 的上限是64G,也就是36位, cat /proc/cpuinfo的结果是:addre
昨天要准备用线程重写webbench,试验了下Fedora Linux 2.6.35.14
不明白您的具体的意思是什么?
已经发送到你QQ邮箱
http://www.2mysite.net/scriptencoder/screnc.asp 站长你好,看
你好,我发现一个问题,就是从mysqld2同步过来的数据,在mysqld1的
晕,我说是怎么回事情,原来我和你一样,忘记设置了活动分区