您的位置:首页 > 运维架构 > Linux

Linux下实现mysql主从数据库读写分离

2017-09-01 15:50 387 查看
好了我又来比比了,这里首先分为两个部分来讲,一个是主从数据库的配置,一个是读写分离的配置,这里主从数据库采用mysql5.1版本,然后一台用于读写分离的数据库安装了mysql_proxy,废话不多说,下面直接进入到安装配置中:

mysql版本:mysql-5.1.72-linux-x86_64-glibc23.tar.gz

mysql_proxy版本:mysql-proxy-0.8.4-linux-el6-x86-64bit.tar.gz

大家可以网上找,应该都有对应的镜像源,找不到@我邮箱353698376@qq.com,我发给大家

1主数据库

首先我们当然得配置IP、DNS、网关等等,确保主数据库,从数据库还有读写分离的数据库可以互通,然后就是安装mysql,这里安装配置过程忽略,大家可以看我下面的写的这个博客,里面只用看mysql安装配置,修改数据目录的相关内容,下面我只给出主要命令

http://blog.csdn.net/qq_26614295/article/details/77451545

tar -zvxf ……解压

mv mysql-5.1.……   /usr/local/mysql

useradd -s /sbin/nologin mysql

cd /usr/local/mysql

mkdir -p /data/mysql

chown -R mysql:mysql /data/mysql

./scripts/mysql_install_db --user=mysql --datadir=/data/mysql

cp support-files/my-large.cnf /etc/my.cnf

cp support-files/mysql/mysql.server /etc/init.d/mysqld

chmod 755 /etc/init.d/mysqld

vi /etc/init.d/mysqld

修改数据文件存放路径datadir=/data/mysql

chkconfig --add mysqld

chkconfig mysqld on

service mysqld start

echo "PATH=$PATH:=/usr/local/mysql/bin" >> /etc/profile添加环境变量

mysqladmin -uroot password 'diaonilaomu123'修改数据库默认root用户密码

好了严格安装上述步骤进行,数据库就算起来了

到这里数据库安装成功了

接着我们要在主数据库上面添加一个用户repli,并且赋予他可以被从数据库复制的权限

mysql -uroot -p'diaonilaomu123'进入数据库

create user repli

grant replication slave on *.* to
'repli'@'从数据库的IP' identified by 'diaonilaomu123'

然后,我们配置/etc/my.cnf文件,开启二进制同步功能,并且设置服务器ID

找到server-id = 1,默认是没有用#号注释的



找到server-id=2,默认是用#号注释的



找到二进制同步文件log-bin,默认如下图不用修改



最后重启数据库service mysqld restart

这样子主数据库就配置好了

2从数据库

安装配置mysql,这里同上,记得后面的添加/usr/local/mysql/bin环境变量还有添加root用户的密码

接着直接配置/etc/my.cnf文件,和上面是类似的,只不过是server-id不一样

找到server-id=1,然后注视掉



找到server-id=2,然后把井号去掉,说明从数据库的server-id是2



找到log-bin=mysql-bin,也是默认开启不用修改的



保存之后重启数据库,service mysqld restart

然后我们要进入数据库

mysql -uroot -p'diaonilaomu123'

接着输入下图命令



这里的master_user是上面主数据库新建的用户,密码是replic的密码

开启slave同步模式

slave start

查看状态



这里要确保slave_io_running和slave_sql_running都是yes才能成功

在此我说明一下常见的问题:

(1)slave_sql_running为no,很有可能你的数据库服务并没有开起来,查看一下,一般都会提示什么线程占用啊等等,我在调试过程中就出现了提示线程占用,有可能是你的数据库没有关闭彻底,我这里用ps -aux | grep mysqld看到数据库进程依然在开启,但是服务却没有开启,我这里用kill -9 进程号   杀掉进程后重启就成功了

(2)slave_io_running为no,很有可能是你的从数据库根本没有连接上主数据库,这里主要原因还是要确保主数据库的复制账户repli的密码有没有设置对,还有,查看下/etc/my.cnf文件,有没有多改了某些内容,我这里碰到的问题是我第一次配置的时候并不知道my.cnf文件是已经默认设置了server-id=1的,然后我又在后面从数据库添加了一行server-id=2,在主数据库后面添加了一行server-id=1,结果就报错了,这里强调一下,server-id和log-bin都可以在文件里面找到的,大家修改就可以了,千万不要去自己加一行!

如果上述都不能解决,只能先进入从数据库用slave stop停止同步,再把数据文件里面的master和slave日志信息删掉,重新进入从数据库里面使用上面的change master to……重新开启slave同步,如何清除主从数据库的日志文件,请按下面操作进行

这里贴出主从数据文件的数据文件夹目录位置



上图,主数据库数据文件夹下的mysql-bin.000001和mysql-bin.index还有master.err是可以删除的,采用”rm -rf 文件名” 删除同时,我们也要在从数据库中删除日志文件



这里slave-relay后缀的都是可以删除的,注意.pid文件不要删除,如果有报错还会有个slave.err文件,这个也是可以删除的

在进行了上面操作之后,最好是进入主数据库里面,然后使用reset master重置一下主数据库,然后再在从数据库那里开启slave同步,在数据库里面输入命令show slave status\G查看连接状态

3测试

进入主数据库,新建一个数据库,并且再新建一个表



进入从数据库查看有没有把新建的数据库和数据表同步过去



4 mysql-proxy配置主从读写分离

我这里使用mysql-proxy-0.8.4-linux-el6-x86-64bit.tar.gz,大家可以到网上下载,里面集成了lua

首先解压

 [root@mysql_proxy local]tar -zvxf mysql-proxy-0.8.4-linux-el6-x86-64bit.tar.gz -C  /usr/local

[root@mysql_proxy local]ln -sv /usr/local/mysql-proxy-0.8.4-linux-el6-x86-64bit  /usr/local/mysql-proxy

把mysql-proxy添加到环境变量中

[root@mysql_proxy local] vi /etc/profile.d/mysql-proxy.sh

在文件中加入

export PATH=$PATH:/usr/local/mysql-proxy/bin

保存退出

[root@mysql_proxy local] source /etc/profile.d/mysql-proxy.sh

执行如下命令启动mysql-proxy进程

[root@mysql_proxy local]mysql-proxy --daemon --log-level=debug --log-file=/var/log/mysqld.log --plugins="proxy" --proxy-backend-addresses="主服务器IP" --proxy-read-only-backend-addresses="从服务器IP" --proxy-lua-script="/usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua"
--plugins=admin --admin-username="proxy" --admin-password="diaonilaomu123" --admin-lua-script="/usr/local/mysql-proxy/share/doc/mysql-proxy/admin-sql.lua"

其中admin-username是主从服务器上面的共有的用户,这里是proxy

所以我们还要在主从数据库服务器上面创建这个proxy用户

分别登录到主从服务器上面

输入下面命令创建用户并且授予权限

grant all on *.* to
'proxy'@'proxy服务器IP' identified by 'diaonilaomu123'

代理服务器就是通过上面的账户密码去访问两台主从服务器上面的数据库从而实现分离

在mysql-proxy服务器上面

[root@mysql_proxy local]netstat -pnl | grep mysql



这里的4040端口用于转发sql数据,4041用于管理

在主或者从服务器上面输入以下命令连接mysql-proxy

[root@master ~]# mysql -uproxy -h服务器mysql-proxy的ip -pdiaonilaomu123 -P4040

如mysql -uproxy -h192.168.10.43 -pdiaonilaomu123  -P4040

然后我们就能看到数据库的数据了

以上只是简单地搭建,测试还需要在集群之中予以体现





内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: