做网站商城/西地那非片能延时多久每次吃多少
总结:MySQL优化主要从数据表的设计,SQL语句,服务器设备,数据读写这几个方面来优化。前面两篇已经写了,这篇主要讲MySQL数据读写分离,意思是,那台服务器是主服务器,负责写,那台服务器是从服务器,负责写。
前提:准备三台服务器
原理:通过mysql-proxy,amoeba作为中间件,往代理机器发送,代理软件进行判断发往不同的mysql服务器。如下图(有点像redis哨兵模式)
服务器:
192.168.101 # 主库-只写
192.168.102 # 从库-只读
192.168.100 # 代理
安装mysql-proxy之前先安装lua脚本语言,用来编译mysql-proxy.
lua官网:http://www.lua.org/ftp/
安装lua
#安装依赖包
yum install cpp binutils glibc glibc-kernheaders glibc-common glibc-devel gcc make readline-devel -y
#切换目录
cd /usr/local/src
#下载lua
wget http://www.lua.org/ftp/lua-5.3.5.tar.gz
#解压
tar -zxvf lua-5.3.5.tar.gz
#修改Makefie配置
cd lua-5.3.5
vim Makefie
#修改配置内容
INSTALL_TOP= /usr/local/lua
#编译
make linux && make install
#添加环境变变量
vim /etc/profile
#添加:
export LUA_HOME=/usr/local/lua
export PATH=$PATH:$LUA_HOME/bin
#环境变量生效:
source /etc/profile
安装mysql-proxy
#切换目录
cd /usr/local/src#下载安装
wget https://cdn.mysql.com/archives/mysql-proxy/mysql-proxy-0.8.5-linux-el6-x86-64bit.tar.gz #解压
tar -zxvf mysql-proxy-0.8.5-linux-el6-x86-64bit.tar.gz
mv mysql-proxy-0.8.5-linux-el6-x86-64bit/ /usr/local/mysql-proxy#创建logs目录和配置文件存放目录
mkdir /usr/local/mysql-proxy/logs
mkdir /usr/local/mysql-proxy/etc
mkdir /usr/local/mysql-proxy/lua#添加环境变量
echo "PATH=/opt/mysql-proxy085/bin/:$PATH" >> /etc/profile
source /etc/profile#复制读写分离配置文件和管理脚本到lua脚本目录
cp /usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua /usr/local/mysql-proxy/lua
cp /usr/local/mysql-proxy/share/doc/mysql-proxy/admin-sql.lua /usr/local/mysql-proxy/lua#修改配置文件
cd /usr/local/mysql-proxy
vim /etc/mysql-proxy.conf#修改配置的内容
[mysql-proxy]
# 运行mysql-proxy用户
user=root
# mysql-proxy连接后端mysql服务器的用户
admin-username=root
# mysql-proxy连接后端mysql服务器的密码
admin-password=123456
# 代理的监听地址端口,默认端口4040
proxy-address=192.168.100:4040
#指定后端主master写入数据
proxy-backend-addresses=192.168.101
#指定后端从slave读取数据
proxy-read-only-backend-addresses=192.168.102
#指定读写分离配置文件位置
proxy-lua-script=/usr/local/mysql-proxy/lua/rw-splitting.lua
#指定管理脚本
admin-lua-script=/usr/local/mysql-proxy/lua/admin-sql.lua
#日志位置
log-file=/usr//local/mysql-proxy/logs/mysql-proxy.log
#定义log日志级别,由高到低分别有(error|warning|info|message|debug)
log-level=debug
#以守护进程方式运行
daemon=true
#mysql-proxy崩溃时,尝试重启
keepalive=true#修改配置文件权限
chmod 660 /etc/mysql-proxy.cnf#修改lua脚本内容:
vim /usr/local/mysql-proxy/lua/rw-splitting.lua
#修改lua内容如下:
if not proxy.global.config.rwsplit thenproxy.global.config.rwsplit = {min_idle_connections = 1, #默认超过4个连接数时,才开始读写分离,改为1max_idle_connections = 1, #默认8,改为1is_debug = false}
end#启动mysql-proxy
/usr/local/mysql-proxy/bin/mysql-proxy --defaults-file=/etc/mysql-proxy.cnf
netstat -tupln | grep 4000 #已经启动
killall -9 mysql-proxy #关闭mysql-proxy使用
测试读写分离
#登录
mysql -u root -p + 回车
Enter password:输入新密码#在主服务器创建master用户用于mysql-proxy远程链接,从服务器也会同步这个操作
mysql> grant all on *.* to 'master'@'192.168.100(代理)' identified by '123456';
#从服务器
mysql> grant all on *.* to 'master'@'192.168.100(代理)' identified by '123456';
#使用从服务器客户端连接mysql-proxy
mysql -u root -h 192.168.100(代理) -P 4040 -123456
总结:还有一种是通过应用APP路由设置访问。