篇七:mysql主从复制、读写分离

一、主从复制的实现

  1、配置 /etc/my.cnf文件

#############共同配置数据库utf-8

  character-set-server = utf8
  collation-server = utf8_general_ci


#############主库 vi /etc/my.cnf log-bin=mysql-bin server-id=1 #############从库 vi /etc/my.cnf log-bin=mysql-bin server-id=2

  2、配置账户通讯

##### Master添加授权用户
mysql> grant replication slave on *.* to 'lgp'@'%' identified by 'lgp123';
##### 查看主库的属性,具体是“mysql-bin.xxxxxx”和port,在绑定从库的时候输入这两个值
mysql> show master status;

##### Slave绑定主库
mysql> change master to master_host='192.168.1.89',master_user='shb',master_password='shb123',master_log_file='mysql-bin.000001',master_log_pos=120;
mysql> start slave;
mysql> show slave status\G;

 

二、主从复制问题整理

  1、Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work.

    参考网址:http://blog.csdn.net/cug_jiang126com/article/details/46846031

    解决方法:在/var/lib/mysql目录下找到auto.cnf文件,修改UUIDs

    如果/var路径下不存在,以my.cnf中mysqld的文件路径查找

 

  2、pid文件找不到引发的问题: MySQL is running but PID file could not be found  或者  mysql is not running but pid file exists  或者  mysql is not running but lock exists

##查看my.cnf文件中pid的文件路径,路径如果包含“mysqld”,确认是否存在,没有则确认“mysql”,有则改成“mysql”,xxx.pid改为 系统名.pid
vi /etc/my.cnf
##如果系统名 “lgp”
cd /var/lib/mysql
cp XXXX.pid lgp.pid

   解决方法:pid文件名错误,根据日志提示的pid文件名,复制创建

##查看日志文件,在日志文件最后一行会打印  xxxxxx.pid文件 ended
cat /var/log/mysqld.log

mysqld_safe mysqld from pid file /var/lib/mysql/localhost.localdomain.pid ended

##复制 xxxxxxxx.pid
cd /var/lib/mysql
cp mysql.pid xxxxxxx.pid

##修改 /etc/my.cnf配置文件
vi /etc/my.cnf

pid-file=/var/lib/mysql/xxxxxxx.pid

  3、Slave_IO_Running: Connecting

    可能原因:1、确认网络互通

         2、连接从库的消息出错:注意标红的地方确认数据无误

            重新查看主库--show master status

            从库:stop slave

               change master to master_host='192.168.1.89',master_user='shb',master_password='shb123',master_log_file='mysql-bin.000001',master_log_pos=120;

 

三、读写分离的实现

  1、下载 mysql-proxy

http://downloads.mysql.com/archives/proxy/

wget http://downloads.mysql.com/archives/get/file/mysql-proxy-0.8.5-linux-glibc2.3-x86-64bit.tar.gz

  2、安装

tar -xzvf mysql-proxy-0.8.5-linux-glibc2.3-x86-64bit.tar.gz
cp -rf mysql-proxy-0.8.5-linux-glibc2.3-x86-64bit /usr/local/
mv mysql-proxy-0.8.5-linux-glibc2.3-x86-64bit mysql-proxy
###存放配置文件
mkdir lua
###存放日志
mkdir logs
cd mysql-proxy
cp share/doc/mysql-proxy/rw-splitting.lua lua/
cp share/doc/mysql-proxy/admin-sql.lua lua/

   创建 /etc/mysql-proxy.cnf文件,存放mysql-proxy的相关配置

vi /etc/mysql-proxy.cnf


[mysql-proxy]
#运行mysql-proxy的用户
user=root

#主从数据库共有的用户
admin-username=shb

#用户的密码
admin-password=shb123

#mysql-proxy运行的ip和端口,不加端口,默认4040
proxy-address=192.168.1.60:4000

#指定读取数据的mysql的ip
proxy-read-only-backend-addresses=192.168.1.59:3306

#指定存储数据的mysql的ip
proxy-backend-addresses=192.168.1.86:3306

#指定读写分离配置文件位置
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-level=info

#以守护进程运行
daemon=true

#mysql-proxy崩溃时,尝试重启
keepalive=true

:wq保存,配置权限
chmod 660 /etc/mysql-proxy.cnf

    修改

vi lua/rw-splitting.lua

###修改位置
if not proxy.global.config.rwsplit then
 proxy.global.config.rwsplit = {
  min_idle_connections = 1, #默认超过4个连接数时,才开始读写分离,改为1
  max_idle_connections = 1, #默认8,改为1
  is_debug = false
 }
end

  3、配置结束后,启动服务

./bin/mysql-proxy --defaults-file=/etc/mysql-proxy.cnf

####常用操作
killall  -9  mysql-proxy  #关闭服务
./bin/mysql-proxy --defaults-file=/etc/mysql-proxy.cnf  #开启服务
ps -ef|grep mysql-proxy  #查看服务进程
 

  4、测试

    在按照mysql的linux系统上测试,会用到mysql命令

###在86上连接60上的mysql-proxy服务
mysql -u shb-h 192.168.1.60 -P 4000 -pshb123

###测试新增、修改、查询
select * from test.tbl_user;

insert into test.tbl_user(id,userName) values('asdasdasda','按时大大');

 

 

四、读写分离问题整理

  1、安装路径

   在mysql官网上面下载最新的mysql-proxy tar.gz包

  2、mysql-proxy没有操作权限

grant all privileges on *.* to shb@'%' identified by 'shb123';
flush privileges;

 

posted @ 2016-12-27 14:03  刘广平  阅读(230)  评论(0)    收藏  举报