1 数据库高可用实现
1.1 主从复制搭建
1.1.1 编辑主数据库
搭建步骤:
1.为数据库创建服务ID号标识数据库
2.需要开启二进制日志文件
3.查询数据的二进制日志状态(文件名称+文件的位置)
4.从库引入主库的文件进行配置
4.1为从库指定主库的位置
1.IP
2.端口3306
3.用户名和密码
4.二进制文件名称和位置
4.2 启动主从模式
1.2 具体实现过程
1.2.1 开启二进制文件
1.编辑mysql的配置文件
2.配置id和文件名称
3.重启Mysql服务
4.检测二进制日志文件是否生效
cd /var/lib/mysql
1.2.2 查询主库的状态
说明:通过查询主库的状态获取二进制日志文件的名称和数据位置
1.3 配置从数据库
1.3.1 配置从库的标号
说明:编辑从库Id.
2.编辑日志文件
3.重启数据库
service mysql restart
4.检测日志文件
cd /var/lib/mysql/
1.4 实现主从
1.4.1 实现主从挂载
1.实现挂载
CHANGE MASTER TO MASTER_HOST="192.168.126.137",
MASTER_PORT=3306,MASTER_USER="root",
MASTER_PASSWORD="root",
MASTER_LOG_FILE="mysql-bin.000001",
MASTER_LOG_POS=120
2.开启主从服务
#开启主从服务
START SLAVE
3.检测主从的状态
说明:如果出现2个yes表示主从配置成功
#检测主从状态
SHOW SLAVE STATUS
4.主从测试
说明:修改主库的数据,查询从库的数据是否修改
1.4.2 挂载错误
CHANGE MASTER TO MASTER_HOST="192.168.126.137",
MASTER_PORT=3306,MASTER_USER="root",
MASTER_PASSWORD="root",
MASTER_LOG_FILE="mysql-bin.000001",
MASTER_LOG_POS=120
#开启主从服务
START SLAVE
#检测主从状态
SHOW SLAVE STATUS
#如果出现yes/no no/yes
STOP SLAVE
#将主库重启 从库重启 依次执行上述语句
1.5 挂载错误集
1.5.1 关于二进制日志文件多个问题
说明:当重启主数据库时,Mysql会自动的生成一个新的二进制日志文件,并且名称是累加的.这时如果实现主从挂载时,应该以show master status 为准
1.5.2 切记不要复制mysql虚拟机
/var/lib/mysql/auto.cnf
1.5.3 关闭防火墙
如果不关闭防火墙,会出现一直在等待的状态.
1.5.4 查看IO异常信息
1.5.5 回滚mysql
说明:将linux回滚,回滚之后重新配置
3 实现数据库的高可用
3.1 高可用的原则
3.1.1 分析
说明:上图中已经实现了数据库的主从复制,但是如果主数据宕机后,这时整个服务将会停止!!!
升级:通过某些技术手段可以实现高可用.但是会遇到数据如何同步的问题???
说明:当主库宕机后,由从库代替主库完成更新操作,如果主数据库成功启动,这时会出现从数据库和主数据库中的内容不匹配的现象??如何处理???
3.2 双机热备模式
3.2.1 双机热备模式说明
说明:为了满足数据库高可用后出现数据不同步的问题,采用双机热备的形式解决该问题.
图例:
说明:双机热别的形式,是实现数据库高可用的前提条件.当A宕机后,通过mycat实现高可用自动切换到B.这时B持续为用户提供服务,并且将”更新”的信息写入二进制日志文件中,当A数据库启动后会自动的同步数据,最终实现高可用!
3.2.2 双机热备的配置
之前:A主----B从机
现在:B主机---A从机
- 查询主库的状态
- 从库挂载主库
#挂载从机
CHANGE MASTER TO MASTER_HOST="192.168.126.141",
MASTER_PORT=3306,MASTER_USER="root",
MASTER_PASSWORD="root",
MASTER_LOG_FILE="mysql-bin.000001",
MASTER_LOG_POS=120
#启动主从服务
START SLAVE
#检测主从状态
SHOW SLAVE STATUS
- 测试结果
向B数据库添加信息,查看A数据库中是否实现数据同步.如果实现数据同步,则搭建完成
3.3 Mycat介绍
3.3.1 Mycat介绍
3.4 MyCat部署
3.4.1 配置JDK
3.4.2 上传文件
1.上传文件
2.解压Mycat文件
3.修改配置文件
3.4.3 Server.xml的配置
3.4.4 配置schema.xml
<!--定义节点名称/节点主机/数据名称--> <dataNode name="jtdb" dataHost="localhost1" database="jtdb" /> <!--参数介绍--> <!--balance 0表示所有的读操作都会发往writeHost主机 --> <!--1表示所有的读操作发往readHost和闲置的主节点中--> <!--writeType=0 所有的写操作都发往第一个writeHost主机--> <!--writeType=1 所有的写操作随机发往writeHost中--> <!--dbType 表示数据库类型 mysql/oracle--> <!--dbDriver="native" 固定参数 不变--> <!--switchType=-1 表示不自动切换, 主机宕机后不会自动切换从节点--> <!--switchType=1 表示会自动切换(默认值)如果第一个主节点宕机后,Mycat会进行3次心跳检测,如果3次都没有响应,则会自动切换到第二个主节点--> <!--并且会更新/conf/dnindex.properties文件的主节点信息 localhost1=0 表示第一个节点.该文件不要随意修改否则会出现大问题--> <dataHost name="localhost1" maxCon="1000" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100"> <heartbeat>select 1</heartbeat> <!--配置第一台主机主要进行写库操作,在默认的条件下Mycat主要操作第一台主机在第一台主机中已经实现了读写分离.因为默认写操作会发往137的数据库.读的操作默认发往141.如果从节点比较忙,则主节点分担部分压力. --> <writeHost host="hostM1" url="192.168.126.137:3306" user="root" password="root"> <!--读数据库--> <readHost host="hostS1" url="192.168.126.141:3306" user="root" password="root" /> </writeHost> <!--定义第二台主机 由于数据库内部已经实现了双机热备.--> <!--Mycat实现高可用.当第一个主机137宕机后.mycat会自动发出心跳检测.检测3次.--> <!--如果主机137没有给Mycat响应则判断主机死亡.则回启东第二台主机继续为用户提供服务.--> <!--如果137主机恢复之后则处于等待状态.如果141宕机则137再次持续为用户提供服务.--> <!--前提:实现双机热备.--> <writeHost host="hostM2" url="192.168.126.141:3306" user="root" password="root"> <readHost host="hostS1" url="192.168.126.137:3306" user="root" password="root" /> </writeHost> </dataHost>
3.4.6 Mycat测试
说明:启动Mycat
命令:
./mycat stop
./mycat start
2.检测Mycat启动是否成功
去logs日志下检测Mycat启动是否成功
- Mycat对外报错的端口是8066
3.4.7 Mycat测试
说明:将主数据库关闭后,测试应用是否正常.再次开启主数据库后检测数据是否实现数据同步.