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]部分插入以下两行配置
log-bin=mysql-bin #开启二进制日志
server-id=1 #设置server-id 需唯一
1
2
打开mysql会话shell
mysql -uroot -proot
创建用户:用户:slave 密码:slave
注意:ip为slave的地址
CREATE USER 'slave'@'192.168.128.167' IDENTIFIED BY 'slave';
1
分配权限
GRANT REPLICATION SLAVE ON *.* TO 'slave'@'192.168.128.167';
flush privileges; #刷新权限
1
2
查看master状态,并记录二进制文件名(mysql-bin.000001)位置(106)
从数据库slave配置
修改mysql配置文件
重启mysql,打开mysql会话,执行同步SQL语句(需要主服务器主机名,登陆凭据,二进制文件的名称和位置)
启动slave同步进程
查看slave状态
重启服务
service mysqld restart
mysql> show master status;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 | 106 | | |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
1
2
3
4
5
6
7
8
vi /etc/my.cnf
在[mysqld]部分插入以下一行配置
server-id=2 #设置server-id 需唯一
mysql> CHANGE MASTER TO
MASTER_HOST='192.168.128.164',
MASTER_USER='slave',
MASTER_PASSWORD='slave',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=106;
1
2
3
4
5
6
7
start slave;
mysql> show slave status\G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.128.164
Master_User: slave
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000001
Read_Master_Log_Pos: 106
Relay_Log_File: mysqld-relay-bin.000002
Relay_Log_Pos: 251
1
2
3
4
5
6
7
8
9
10
11
主从配置完成,可以通过主库建库,建表,插入数据测试
读写分离
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等
---------------------
作者:Elk_love_madness
原文:https://blog.csdn.net/qq_38928944/article/details/85341616
版权声明:本文为博主原创文章,转载请附上博文链接!