数据库读写分离mysql

主服务器master记录数据库操作日志到Binary log,从服务器开启i/o线程将二进制日志记录的操作同步到relay log(存在从服务器的缓存中),另外sql线程将relay log日志记录的操作在从服务器执行。 
记住这张图,接下来基于这个图实际设置主从数据库。

主从数据库设置的具体步骤
首先要有两个数据库服务器master、slave(也可以用一个服务器安装两套数据库环境运行在不同端口,slave也可以举一反三设置多个),我们穷人就买虚拟云服务器玩玩就行 0.0。以下操作假设你的两台服务器上都已经安装好了mysql服务。

1.打开mysql数据库配置文件
vim /etc/my.cnf
2.在主服务器master上配置开启Binary log,主要是在[mysqld]下面添加:

server-id=1
log-bin=master-bin
log-bin-index=master-bin.index

3.重启mysql服务
service mysql restart
ps:重启方式随意4.检查配置效果,进入主数据库并执行

mysql> SHOW MASTER STATUS;


可以看到下图表示配置没问题,这里面的File名:master-bin.000001 我们接下来在从数据库的配置会使用:

5.配置从服务器的 my.cnf
在[mysqld]节点下面添加: 

server-id=2
relay-log-index=slave-relay-bin.index
relay-log=slave-relay-bin


这里面的server-id 一定要和主库的不同,如图: 

配置完成后同样重启从数据库一下

service mysql restart
6.接下来配置两个数据库的关联
首先我们先建立一个操作主从同步的数据库用户,切换到主数据库执行:

mysql> create user repl;
mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'从xxx.xxx.xxx.xx' IDENTIFIED BY 'password';
mysql> flush privileges;


这个配置的含义就是创建了一个数据库用户repl,密码是mysql, 在从服务器使用repl这个账号和主服务器连接的时候,就赋予其REPLICATION SLAVE的权限, *.* 表面这个权限是针对主库的所有表的,其中xxx就是从服务器的ip地址。 
进入从数据库后执行:

mysql> change master to master_host='主xxx.xxx.xxx.xx',master_port=3306,master_user='repl',master_password='password',master_log_file='master-bin.000001',master_log_pos=0;


这里面的xxx是主服务器ip,同时配置端口,repl代表访问主数据库的用户,上述步骤执行完毕后执行start slave启动配置:

mysql> start slave;

停止主从同步的命令为:

mysql> stop slave;


查看状态命令,\G表示换行查看

mysql> show slave status


可以看到状态如下: 

这里看到从数据库已经在等待主库的消息了,接下来在主库的操作,在从库都会执行了。我们可以主库负责写,从库负责读(不要在从库进行写操作),达到读写分离的效果。

我们可以简单测试:
在主数据库中创建一个新的数据库:

mysql> create database testsplit;


在从数据库查看数据库:

mysql> show databases;


可以看到从数据库也有testsplit这张表了,亲测可用。在主数据库插入数据,从数据库也可以查到。 
至此已经实现了数据库主从同步

代码层面实现读写分离
上面我们已经有了两个数据库而且已经实现了主从数据库同步,接下来的问题就是在我们的业务代码里面实现读写分离,假设我们使用的是主流的ssm的框架开发的web项目,这里面我们需要多个数据源。

在此之前,我们在项目中一般会使用一个数据库用户远程操作数据库(避免直接使用root用户),因此我们需要在主从数据库里面都创建一个用户mysqluser,赋予其增删改查的权限:
mysql> GRANT select,insert,update,delete ON *.* TO 'mysqluser'@'%' IDENTIFIED BY 'mysqlpassword' WITH GRANT OPTION;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章