1、主从复制

原理

MySQL之间数据复制的基础是二进制日志文件(binary log file)。一台MySQL数据库一旦启用二

进制日志后,其作为master,它的数据库中所有操作都会以“事件”的方式记录在二进制日志中,其他

数据库作为slave通过一个I/O线程与主服务器保持通信,并监控master的二进制日志文件的变化,如

果发现master二进制日志文件发生变化,则会把变化复制到自己的中继日志中,然后slave的一个

SQL线程会把相关的“事件”执行到自己的数据库中,以此实现从数据库和主数据库的一致性,也就实

现了主从复制。

实践

准备工作

主数据库服务器(master):192.168.128.164,MySQL已经安装,并且无应用数据。

从数据库服务器(slave):192.168.128.167,MySQL已经安装,并且无应用数据。

主数据库master配置

修改mysql配置文件

重启mysql,并创建用于同步的用户账号

vi /etc/my.cnf

在[mysqld]部分插入以下两行配置




mysql 跨主机插入 mysql 跨服务器查询_mysql


打开mysql会话shell

mysql -uroot -proot

创建用户:用户:slave 密码:slave

注意:ip为slave的地址


mysql 跨主机插入 mysql 跨服务器查询_mysql读写分离实现_02


分配权限


mysql 跨主机插入 mysql 跨服务器查询_mysql 跨主机插入_03


查看master状态,并记录二进制文件名(mysql-bin.000001)位置(106)

从数据库slave配置

修改mysql配置文件

重启mysql,打开mysql会话,执行同步SQL语句(需要主服务器主机名,登陆凭据,二进制文件的名称和位置)

启动slave同步进程

查看slave状态

重启服务


mysql 跨主机插入 mysql 跨服务器查询_mysql 跨主机插入_04


vi /etc/my.cnf

在[mysqld]部分插入以下一行配置


mysql 跨主机插入 mysql 跨服务器查询_mysql 跨主机插入_05


start slave;


mysql 跨主机插入 mysql 跨服务器查询_mysql读写分离实现_06


主从配置完成,可以通过主库建库,建表,插入数据测试

读写分离

Mysql新版驱动类ReplicationDriver实现读写分离

准备工作,需搭建好mysql主从集群

实现目标

使数据写入到master

读数据时,从slave中读取

原理使用mysql驱动自带的replicationDriver来实现,replicationDriver简单来说就是存在两个Connection,一个masterConnection,一个slaveConnection;当setReadonly(true)就把currentConnection=slaveConnection,反之设置为masterConnection

触发条件

读操作需设置 readOnly 为 true

实现步骤

applicationContext.xml
Relay_Master_Log_File: mysql-bin.000001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:

读操作需设置readonly=true

测试

数据库中间件

如:mysql-proxy、mycat等