mysql-配置主从数据库,实现读写分离
主从分离的原则:所有的写操作在主数据库中进行,因为主从分离的原理是涉及到同步数据,那就可能会出现延迟或者其他问题,就可能会出现脏数据。
所以,在从库中进行的读操作也必须是有一定容忍性的数据,例如日志等。
例如需要注意,如果一个业务中有读和写的操作。
那么这个操作的库必须是主库,因为这个涉及到事务,需要非常小心。
主从同步的原理:
从数据库后台线程请求主数据库的更新数据,主数据库后台线程接收到请求后会读取bin-log文件内容,然后放到从库的请求响应中。
从库接收到响应后,会将接收到的内容放到relay-log文件中,然后读取这个文件中同步过来的sql,然后在执行一遍。
好了,下面先新增一个从数据库:
1,复制一个已经安装好的mysql就好 2,修改新mysql的相关配置(端口,安装目录,数据目录),在my.ini文件中修改port,basedir,datadir 3,为新的mysql创建数据目录(从mysql的安装目录中拷贝data文件夹); 4,打开cmd命令窗口,为新的mysql创建windows系统服务mysqld install MySQL2 --defaults-file="D:\MySQL Server 5.5 Copy\my.ini"
5,检查创建的系统服务,并启动测试;
到这里,就把从数据库搞好了。
接下来就是配置主从数据库了。
1.在主数据的my.ini文件中增加如下信息:
server-id:3306//给数据库服务的唯一标识,一般为大家设置服务器Ip的末尾号,在一个集群中,这个id是不能重复的; log-bin=master-bin://开启二进制文件;后面设置的这个master-bin就是二进制文件的名字前缀(名字); log-bin-index=master-bin.index//开启二进制文件的索引;名字一般为log-bin.index
2.启动主数据库,执行show master status;
mysql> show master status;
+-------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| master-bin.000001 | 107 | | |
+-------------------+----------+--------------+------------------+
1 row in set
只要能查询到信息,说明主库OK了。
这里要注意上面显示的Postion是指当前bin-log文件记录到的位置,如果你的从数据库可以对过去的数据既往不咎,那你在下面设置同步时可以将起点设置为最新的Postion,不过这样会出现数据不一致的情况,看情况选择吧。
3.配置从数据库
在从数据的my.ini文件中增加如下信息:
server-id=3307;//不一定3307,随你 relay-log=slave-relay-bin relay-log-index=slave-relay-bin.index
4.启动从服务器
5.让从数据库指定master库,并且设置同步数据的信息
在从数据库的命令行中运行下面的这一句命令
change master to master_host=\'127.0.0.1\',
master_user=\'root\',
master_password=\'admin\',
master_port=3306,
master_log_file=\'master-bin.000001\',
master_log_pos=107;
解释一下,最后master_log_pos=107的作用是指定请求同步Master的bin-log的哪一行数据之后的内容;
6.完事了,修改主数据库的数据,然后测试从数据库的数据是否跟着同步修改了呢。
java项目如何进行读写分离?可以看我另一篇文章参考下:
https://www.cnblogs.com/tinyj/p/9864128.html