一 、源码安装过程 解压并编译安装 [iyunv@MySQL-Master ~]# cd /usr/local/src [iyunv@MySQL-Master src]# wget http://ftp.jaist.ac.jp/pub/mysql/Downloads/MySQL-5.1/mysql-5.1.56.tar.gz [iyunv@MySQL-Master src]# tar zxvf mysql-5.1.56.tar.gz [iyunv@MySQL-Master src]# cd mysql-5.1.56 [iyunv@MySQL-Master mysql-5.1.56]# ./configure --prefix=/usr/local/mysql \ --localstatedir=/data/mysql --enable-assembler \ --with-client-ldflags=-all-static --with-mysqld-ldflags=-all-static \ --with-pthread --enable-static --with-big-tables --without-ndb-debug \ --with-charset=utf8 --with-extra-charsets=all \ --without-debug --enable-thread-safe-client --enable-local-infile --with-plugins=max [iyunv@MySQL-Master mysql-5.1.56]# make && make install 安装参数介绍 --prefix=/usr/local/mysql --localstatedir=/data/mysql //主程序安装目录 //数据文件存放目录 --with-client-ldflags=-all-static --with-mysqld-ldflags=-all-static//静态编译安装 mysql 客户端和服务端 --with-pthread //采用线程 --with-big-tables //对大表的支持 --with-charset=utf8 //默认字符集为 utf8 --with-extra-charsets=all //安装所有字符集 --without-debug //去掉 debug 模式 //以线程方式编译客户端 --enable-thread-safe-client --with-plugins=max //添加对 innodb 及 partition 的支持 --enable-local-infile //对 load data 的支持 创建用户和组 [iyunv@MySQL-Master mysql-5.1.56]# groupadd mysql [iyunv@MySQL-Master mysql-5.1.56]# useradd -s /sbin/nologin -M -g mysql mysql 安装数据库 [iyunv@MySQL-Master mysql-5.1.56]# cd /usr/local/mysql/ [iyunv@MySQL-Master mysql]# mkdir -p /data/mysql [iyunv@MySQL-Master mysql]# bin/mysql_install_db --basedir=/usr/local/mysql/ --datadir=/data/mysql/ 相应权限的修改 [iyunv@MySQL-Master mysql]# chown -R root:mysql /usr/local/mysql/ [iyunv@MySQL-Master mysql]# chown -R mysql:mysql /data/mysql/ 配置文件 [iyunv@MySQL-Master mysql]# cp /usr/local/mysql/share/mysql/my-medium.cnf /etc/my.cnf [iyunv@MySQL-Master mysql]# cp /usr/local/mysql/share/mysql/mysql.server /etc/init.d/mysqld [iyunv@MySQL-Master mysql]# chmod 755 /etc/init.d/mysqld [iyunv@MySQL-Master mysql]# chkconfig --add mysqld [iyunv@MySQL-Master mysql]# vim /root/.bash_profile PATH=$PATH:$HOME/bin:/usr/local/mysql/bin [iyunv@MySQL-Master mysql]# source /root/.bash_profile 启动数据库并初始化密码 [iyunv@MySQL-Master mysql]# service mysqld start Starting MySQL [iyunv@MySQL-Master mysql]# mysqladmin -u root password *** [OK] //设置成自己的密码
二、主从复制的实现 安装 MySQL Slave 实验环境: 主机名 IP 地址 作用 MySQL-Master 192.168.0.13 MySQL 主库服务器 MySQL-Slave 192.168.0.14 MySQL 从库服务器
在 MySQL Master 上的配置 1、 创建 Replication 用户 [iyunv@MySQL-Master ~]# mysql -u root -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 2 Server version: 5.1.55-log Source distribution Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved. This software comes with ABSOLUTELY NO WARRANTY. This is free software, and you are welcome to modify and redistribute it under the GPL v2 license Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> GRANT REPLICATION SLAVE,reload,super ON *.* TO slave@192.168.0.14 IDENTIFIED BY 'unixhot'; Query OK, 0 rows affected (0.00 sec) Mysql>quit
2、 修改 MySQL 配置文件
[iyunv@MySQL-Master ~]# vim /etc/my.cnf server-id=1 #1..设置 server id #打开二进制日志,最好放在不同的硬盘上,减小磁盘 IO 消耗 #设置二进制日志保存日期 #设置每个 binlog 文件的大小 log-bin=mysql-binlog expire_logs_day=10 max_binlog_size=500M 修改完后重新加载数据库:[iyunv@MySQL-Master ~]# /etc/init.d/mysqld restart 注意:mysql-5.1.45.tar.gz 版本默认开启了 log-bin 选项,并且 server-id 默认为 1.
3、 获得 Master DB 的相关信息 mysql> show master status; +------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000003 | 106 | | | +------------------+----------+--------------+------------------+ 1 row in set (0.00 sec) 注意:供 Slave DB 连接时使用。
4、 备份 Master DB 数据到 Slave DB 备份的方法有很多,可以直接复制数据文件,也可以使用 mysqldump
MySQL Slave 上的配置
1 、修改 MySQL 配置文件 [iyunv@MySQL-Slave ~]# vim /etc/my.cnf server-id=2 #配置多个从服务器时依次设置 id 号 #mysql 复制可能出现主服务器上可以运行的语句,从服务器不能够运行,所 slave-skip-errors=all 以我们在 my.cnf 加一句 slave-skip-errors=all 意思是忽略所有的 sql 语句错误! relay-log=mysql-relay-bin #该文件用于存放 Slave 端的 I/O 线程从 Master 端读取的二进制文件信息改完后重启数据库 [iyunv@MySQL-Slave ~]# /etc/init.d/mysqld restart
2 、在 Slave 服务器授权
mysql> CHANGE MASTER TO > MASTER_HOST='192.168.0.13', -> MASTER_USER='slave', -> MASTER_PASSWORD='unixhot', -> MASTER_LOG_FILE='mysql-bin.000003', -> MASTER_LOG_POS=106; Query OK, 0 rows affected (0.04 sec) 参数说明: MASTER_HOST:Master 主机名(或者 IP 地址) MASTER_USER:Slave 连接 Master 主机的用户名 MASTER_PASSWORD:Slave 连接 Master 的用户密码 MASTER_LOG_FILE:开始复制的日志文件名称 MASTER_LOG_POS:开始复制的日志文件位置,也就是 Log Position。
3、启动 Slave DB mysql> START SLAVE; Query OK, 0 rows affected (0.00 sec)
4、 测试复制是否成功 可以在 Master DB 创建一个数据库,或者表,到 Slave DB 上看,如果配置成功就可以成功同步的
三、MySQL Proxy
1、 MySQL 读写分离简介 MySQL-Proxy,是处在你的 MySQL 数据库客户和服务端之间的程序,它还支持嵌入性脚本语言 Lua。这个代理可以用来分析、监控和变换(transform) 通信数据。 MySQL Proxy 最强大的一项功能是实现“读 写分离(Read/Write Splitting)”。基本的原理是让 主数据库处理事务性查询,而从数据库处理 SELECT 查询。数据库复制被用来把事务性查询导致的 变更同步到集群中的从数据库。
2 、MySQL 环境部署 实验环境: 主机名 IP 地址 作用 MySQL-Master 192.168.140.128 MySQL 主库服务器 MySQL-Slave 192.168.140.129 MySQL 从库服务器 MySQL-Proxy 192.168.140.130 MySQL 代理服务器
3、 部署安装环境
[iyunv@MySQL-Proxy ~]# rpm -q libevent glib2 pkgconfig libtool mysql-devel [iyunv@MySQL-Proxy ~]# cd /usr/local/src [iyunv@MySQL-Proxy src]# wget http://www.lua.org/ftp/lua-5.1.4.tar.gz [iyunv@MySQL-Proxy src]# wget http://gd.tuwien.ac.at/db/mysql/ ... -proxy-0.6.0.tar.gz [iyunv@MySQL-Proxy src]# wget http://www.monkey.org/~provos/libevent-1.4.13-stable.tar.gz 4、 安装 lua [iyunv@MySQL-Proxy src]# tar zxvf lua-5.1.4.tar.gz [iyunv@MySQL-Proxy src]# cd lua-5.1.4 [iyunv@MySQL-Proxy lua-5.1.4]# vi Makefile 修改: INSTALL_TOP= /usr/local/lua [iyunv@MySQL-Proxy lua-5.1.4]# make && make linux && make install [iyunv@MySQL-Proxy lua-5.1.4]# export LUA_CFLAGS="-I/usr/local/lua/include" LUA_LIBS="-L/usr/local/lua/lib -llua -ldl" LDFLAGS="-L/usr/local/libevent/lib -lm" [iyunv@MySQL-Proxy lua-5.1.4]# export CPPFLAGS="-I/usr/local/libevent/include" [iyunv@MySQL-Proxy lua-5.1.4]# export CFLAGS="-I/usr/local/libevent/include"
5、 安装 libevent [iyunv@MySQL-Proxy src]# tar zxvf libevent-1.4.13-stable.tar.gz [iyunv@MySQL-Proxy src]# cd libevent-1.4.13-stable [iyunv@MySQL-Proxy libevent-1.4.13-stable]# ./configure --prefix=/usr/local/libevent [iyunv@MySQL-Proxy libevent-1.4.13-stable]# make && make install
6、 安装 MySQL [iyunv@MySQL-Proxy src]# tar zxvf mysql-5.1.47.tar.gz [iyunv@MySQL-Proxy src]# cd mysql-5.1.47 [iyunv@MySQL-Proxy mysql-5.1.47]# ./configure --prefix=/usr/local/mysql --without-server
7、 设置环境变量 [iyunv@MySQL-Proxy src]# export LUA_CFLAGS="-I/usr/local/lua/include" LUA_LIBS="-L/usr/local/lua/lib -llua -ldl" LDFLAGS="-L/usr/local/libevent/lib -lm" [iyunv@MySQL-Proxy src]# export CPPFLAGS="-I/usr/local/libevent/include" [iyunv@MySQL-Proxy src]# export CFLAGS="-I/usr/local/libevent/include"
8、 安装 MySQL-Proxy 注意:如果你安装更高版本的 mysql-proxy 需要升级你的 glib。 [iyunv@MySQL-Proxy src]# tar zxvf mysql-proxy-0.6.0.tar.gz [iyunv@MySQL-Proxy src]# cd mysql-proxy-0.6.0 [iyunv@MySQL-Proxy mysql-proxy-0.6.0]# ./configure --prefix=/usr/local/mysql-proxy --with-mysql=/usr/local/mysql --with-lua [iyunv@MySQL-Proxy mysql-proxy-0.6.0]# make && make install
9、 MySQL-Proxy 配置 [iyunv@MySQL-Proxy ~]# /usr/local/mysql-proxy/sbin/mysql-proxy --help-all Usage: mysql-proxy [OPTION...] - MySQL Proxy Help Options: -?, --help --help-all --help-admin --help-proxy admin module --admin-address=<host:port> proxy-module -proxy-address=<host:port> #代理主机监听地址和端口,默认是 4040 #只读连接时,代理服务器的监听地址及端口。 #管理主机监听地址和端口,默认是 4041 --proxy-read-only-backend-addresses=<host:port> 默认 4042 --proxy-backend-addresses=<host:port> --proxy-skip-profiling --proxy-fix-bug-25371 --proxy-lua-script=<file> --no-proxy Application Options: -V, --version --daemon --pid-file=<file> 连接真实服务器的地址及监听端口,默认是 3306 #连接后端真实服务器时的地址及监听端口,默认是 3306
10、 MySQL Proxy 启动 (1)、命令行启动 [iyunv@MySQL-Proxy ~]# /usr/local/mysql-proxy/sbin/mysql-proxy \ > --proxy-read-only-backend-addresses=192.168.140.129:3306 \ > --proxy-backend-addresses=192.168.140.128:3306 \ > --proxy-lua-script=/usr/local/mysql-proxy/share/mysql-proxy/rw-splitting.lua & 检测是否开始监听: [iyunv@MySQL-Proxy ~]# netstat -ntlp | grep mysql tcp 0 0.0.0.0:4040 0.0.0.0:* LISTEN 28739/mysql-proxy tcp 0 0.0.0.0:4041 0.0.0.0:* LISTEN 28739/mysql-proxy (2)脚本启动 [iyunv@MySQL-Proxy ~]# vi /etc/init.d/mysql-proxy #!/bin/bash PRODIR=/usr/local/mysql-proxy LUA_PATH=$PRODIR/share/mysql-proxy
start(){ $PRODIR/sbin/mysql-proxy --proxy-read-only-backend-addresses=192.168.140.129:3306 --proxy-lua-script=$LUA_PATH/rw-splitting.lua --proxy-backend-addresses=192.168.140.128:3306 >>$PRODIR/mysql-proxy.log & } stop(){ kill $(pidof mysql-proxy) if [ $? -ne 0 ];then kill -9 $(pidof mysql-proxy) fi } case "$1" in start) start ;; stop) stop ;; restart) stop start ;; *) echo $"Usage: $0 {start|stop|restart}" Esac [iyunv@MySQL-Proxy ~]# chmod +x /etc/init.d/mysql-proxy [iyunv@MySQL-Proxy ~]# /etc/init.d/mysql-proxy start
四、 MySQL Proxy 测试
1、测试环境部署 在 MySQL-Master 上创建测试数据库和用户。 mysql> create database unixhot; mysql> GRANT ALL PRIVILEGES ON unixhot.* to proxytest@'%' identified by 'unixhot';
2、 连接测试 [iyunv@MySQL-Proxy ~]# mysql -h 192.168.140.130 -P 4040 -u proxytest -p 输入密码即可登录。
|