一.mysql主从库与读写分离的实现理论
创新互联专注于东安网站建设服务及定制,我们拥有丰富的企业做网站经验。 热诚为您提供东安营销型网站建设,东安网站制作、东安网页设计、东安网站官网定制、小程序开发服务,打造东安网络公司原创品牌,更为您提供东安网站排名全网营销落地服务。
二.mysql配置
1.准备两台服务器安装mysql(也可以在一台中装两个mysql修改端口号避免冲突)
2.分别连接mysql
3.配置mysql
1.配置主库 monster
打开binary log
2.配置从库
主库授权
账号repl后面的是从库的ip地址 mysql是账号repl的密码
刷新
后面master_log_pos=0 表示从零开始同步 master_log_file 是上面SHOW MASTER STATUS 下面的file文件
在从库中开启主从跟踪
查看从库状态
从库中终止主从同步 stop slave
查看 my.cnf 文件 把 server -id=1 的字段删除 保留server-id=2 修改后保存 重启mysql 重新连接 开启主从同步start slave
查看从库状态 发现没有错误 到此主从同步配置已经完成.
Slave从服务器(Ubuntu)
(1)找到MySQL安装文件夹修改my.cnf文件,vim my.cnf
s
(2) ./support-files/myql.server restart 重启MySQL服务 , ./bin/mysql 进入MySQL命令窗口
(3)连接Master
change master to master_host='192.168.0.104', //Master 服务器Ip
master_port=3306,
master_user='repl',
master_password='mysql',
master_log_file='master-bin.000001',//Master服务器产生的日志
master_log_pos=0;
(4)启动Slave
start slave;
但我们仔细观察我们会发现,当我们的项目都是用的单体数据库时,那么就可能会存在如下问题:
为了解决上述提到的两个问题,我们可以准备两 (多) 台MySQL,一台主( Master )服务器,一台从( Slave )服务器,主库的 数据变更 (写、更新、删除这些操作) ,需要 同步 到从库中 (主从复制) 。而用户在访问我们项目时,如果是 写操作 (insert、update、delete),则直接操作 主库 ;如果是 读操作 (select) ,则直接操作从库,这种结构就是 读写分离 啦。
在这种读写分离的结构中,从库是可以有多个的
MySQL主从复制是一个 异步 的复制过程,底层是基于Mysql数据库自带的 二进制日志 功能。就是一台或多台MySQL数据库(slave,即 从库 )从另一台MySQL数据库(master,即 主库 )进行日志的复制,然后再解析日志并应用到自身,最终实现 从库 的数据和 主库 的数据保持一致。MySQL主从复制是 MySQL数据库自带功能,无需借助第三方工具。
二进制日志(BINLOG)记录了所有的 DDL(数据定义语言)语句和 DML(数据操纵语言)语句,但是不包括数据查询语句。此日志对于灾难时的数据恢复起着极其重要的作用,MySQL的主从复制, 就是通过该binlog实现的。默认MySQL是未开启该日志的。
在环境搭建之前,我们需要准备好两台服务器,如果生活富裕使用的是两台云服务器的时候记得要开放安全组,即防火墙;如果是比狗子我生活好点但也是用的虚拟机的话,记得别分这么多内存启动蓝屏了(别问怎么知道的)
这里就不给大家展示数据库的安装和防火墙的操作了,这个我感觉网上好多资源都能够满足遇到的问题,在搭建主从库的时候有在网上见到过说MySQL版本要一致的,我也没太留意直接就在之前的MySQL上操作了,大家可以自己去验证一下。
服务器:192.168.150.100(别试了黑不了的,这是虚拟机的ip)
这里有三个方法都能重启MySQL,最简单的无疑就是一关一开:
登录进去MySQL之后才能够执行下面的命令,因为这是SQL命令,Linux不认识这玩意是啥。
这个时候还 不用退出MySQL ,因为下面的命令还是SQL命令,执行下面的SQL,可以拿到我们后面需要的两个重要参数。
执行完这一句SQL之后,==不要再操作主库!不要再操作主库!不要再操作主库!==重要的事情说三遍,因为再操作主库之后可能会导致红框中的 两个属性值会发生变化 ,后面如果发生了错误可能就和这里有那么两毛钱关系了。
服务器:192.168.150.101(别试了黑不了的,这也是虚拟机的ip)
这里要注意server-id和主库以及其他从库都不能相同,否则后面将会配置不成功。
这里有三个方法都能重启MySQL,最简单的无疑就是一关一开:
登录进去MySQL之后才能够执行下面的命令,因为这是SQL命令
参数说明:
这个时候还 不用退出MySQL ,因为下面的命令还是SQL命令,执行下面的SQL,可以看到从库的状态信息。通过状态信息中的 Slave_IO_running 和 Slave_SQL_running 可以看出主从同步是否就绪,如果这两个参数全为 Yes ,表示主从同步已经配置完成。
这可能是由于linux 是复制出来的,MySQL中还有一个 server_uuid 是一样的,我们也需要修改。 vim /var/lib/mysql/auto.cnf
这应该就是各位大牛设置server_id的时候不小心设置相同的id了,修改过来就行,步骤在上面的配置中。
这是狗子在操作过程中搞出来的一个错误……
出错的原因是在主库中删除了用户信息,但是在从库中同步的时候失败导致同步停止,下面记录自己的操作(是在进入MySQL的操作且是从库)。
在数据库中操作时,一定要注意当前所在的数据库是哪个,作为一个良好的实践:在SQL语句前加 USE dbname 。
Sharding-JDBC定位为 轻量级Java框架 ,在Java的JDBC层提供的额外服务。 它使用客户端直连数据库,以 jar包 形式提供服务,无需额外部署和依赖,可理解为增强版的JDBC驱动, 完全兼容JDBC和各种ORM框架 。
使用Sharding-JDBC可以在程序中轻松的实现数据库 读写分离 。
Sharding-JDBC具有以下几个特点:
下面我们将用ShardingJDBC在项目中实现MySQL的读写分离。
在pom.xml文件中导入ShardingJDBC的依赖坐标
在application.yml中增加数据源的配置
这时我们就可以对我们项目中的配置进行一个测试,下面分别调用一个更新接口和一个查询接口,通过查看日志中记录的数据源来判断是否能够按照我们预料中的跑。
搞定!!!程序正常按照我们预期的成功跑起来了,成功借助ShardingJDBC在我们项目中实现了数据库的读写分离。
在老版本的MySQL 3.22中,MySQL的单表限大小为4GB,当时的MySQL的存储引擎还是ISAM存储引擎。但是,当出现MyISAM存储引擎之后,也就是从MySQL 3.23开始,MySQL单表最大限制就已经扩大到了64PB了(官方文档显示)。也就是说,从目前的技术环境来看,MySQL数据库的MyISAM存储 引擎单表大小限制已经不是有MySQL数据库本身来决定,而是由所在主机的OS上面的文件系统来决定了。\x0d\x0a\x0d\x0a而MySQL另外一个最流行的存储引擎之一Innodb存储数据的策略是分为两种的,一种是共享表空间存储方式,还有一种是独享表空间存储方式。\x0d\x0a当使用共享表空间存储方式的时候,Innodb的所有数据保存在一个单独的表空间里面,而这个表空间可以由很多个文件组成,一个表可以跨多个文件存在,所 以其大小限制不再是文件大小的限制,而是其自身的限制。从Innodb的官方文档中可以看到,其表空间的最大限制为64TB,也就是说,Innodb的单 表限制基本上也在64TB左右了,当然这个大小是包括这个表的所有索引等其他相关数据。\x0d\x0a而当使用独享表空间来存放Innodb的表的时候,每个表的数据以一个单独的文件来存放,这个时候的单表限制,又变成文件系统的大小限制了。
读写分离的前提是:主从同步。也就是需要2台以上的数据库服务器,分别安装部署好MySQL服务。然后,再在其中一台选择为主库,另外一台选择为从库。主库可以读写,丛库只能读。
然后再基于mycat中间件和mysql进行集成来实现读写分离。
我刚给公司做完mysql的主从读写分离
先给你个思路
第一步:先做mysql的主从(Master/Slave Replication),实现数据同步
第二部:通过Amoeba来实现读写分离,也可以通过mysql proxy(比较麻烦)。
ps:
我的环境是两台装windows server 2008,一台做主,一台做从。
如果你需要的话,留下邮箱,我发给你一个我自己刚做好的文档。照着做就可以了