1 数据库的高可用
1.1 数据库知识
1.1.1 数据库的工作原理
说明:数据库其实内部有缓冲区,在缓冲区中的数据是待处理的数据,数据库源源不断的从缓存区中获取数据进行处理.但是如果并发压力高了,会造成缓存区数据溢出.最终导致数据库宕机,不能正常响应.
1.1.2 数据库说明
说明:数据库如果想实现高可用的性能.需要解决以下的问题
- 多个数据库如何实现数据同步.
- 用户如何选择链接哪个数据库
- 如果数据库宕机,如何实现高可用
- 如果数据库宕机,宕机后的数据如何实现数据同步
1.1.3 解决思路
说明:
经过架构的优化,让服务器将来不会直接连接真实的数据库.而是链接代理数据库.
在代理数据库中进行相应的配置,实现读和写的分离.进一步提高数据库的性能.
1.2 数据备份
1.2.1 冷备份
说明:定时的将数据库的信息进行导出,存放到固定的磁盘中.如果数据库出现宕机,则可以通过数据备份实现数据的恢复.
特点:操作次数少,数据备份不完全.但是作为数据恢复的最后手段一般也会使用
建议:定期实现冷备份进行保存
方式:一般通过某些数据库工具进行人为的导出.
1.2.2 热备份
说明:如果主数据库进行了更新操作时,会实时向从库发送数据.这时从库接收数据和自动的进行写库操作.这样的备份方式可以做到实时备份.
1.3 数据库热备份
1.3.1 原理
步骤:
- 当主库信息发生修改时,主库会将信息写入到二进制日志文件中(需要手动开启)
- 从库中通过IO线程实时监听主库的二进制文件.主要监听变化的数据
- 从库将获取到的数据写入中继日志中
- 通过Sql线程读取中继日志信息.实现数据库写入,最终实现数据同步.
问题:) (了解)
- 为什么读取二进制日志后不进行直接写库操作??
a) 为了数据的安全性
- 中继日志有什么作用
a) 保证数据的有效
b) 可以被别人读取,实现数据的备份.
2 后台数据库搭建
2.1 数据库Linux部署
2.1.1 准备服务器
说明:将京淘空白虚拟机进行克隆,修改名称mysql-master.
2.1.2 拍摄快照
说明:一般采用快照的方式记录当前虚拟机状态,如果后期操作过程中,造成了不可挽回的损失,则直接恢复快照即可.
通过上述操作可以实现系统的回滚
2.1.3 固定IP地址
说明:点击网络配置后选择最新的网络环境autoeth3.点击Edit
选择IpV4进行IP配置
2.2 Mysql部署
2.2.1 创建文件夹
mkdir mysql
[root@localhost src]# ls
mysql
[root@localhost src]# cd mysql/
[root@localhost mysql]# ls
[root@localhost mysql]# pwd
2.2.2 导入安装文件
2.2.3 解压jar包
tar -xvf Percona-Server-5.6.24-72.2-r8d0f85b-el6-x86_64-bundle.tar
2.2.4 安装Mysql
命令:
rpm -ivh Percona-Server-56-debuginfo-5.6.24-rel72.2.el6.x86_64.rpm
rpm -ivh Percona-Server-shared-56-5.6.24-rel72.2.el6.x86_64.rpm
rpm -ivh Percona-Server-client-56-5.6.24-rel72.2.el6.x86_64.rpm
rpm -ivh Percona-Server-server-56-5.6.24-rel72.2.el6.x86_64.rpm
2.2.5 启动Mysql
service mysql start
2.2.6 设定用户名和密码
mysqladmin -u 'root' password "root"
2.2.7 登录并且导入sql
在输入password时是没有提示的.
导入京淘sql语句
2.2.8 开放权限
grant all on *.* to 'root'@'%' identified by "root";
退出mysql后关闭防火墙
service iptables stop
2.2.9 通过工具连接
2.2.10 如果启动报错
如果报错信息中含有 XXX.pid socket报错.杀死进程后再次启动mysql
service mysql start
2.3 修改mysql配置文件
2.3.1 修改my.cnf
路径:/etc/my.cnf vim my.cnf
重启Mysql:
2.3.2 检测二进制日志文件是否开启
说明:如果mysql的安装目录 /var/lib/mysql中有二进制文件则表示启动成功.
2.4 安装从数据库
与刚才的步骤相同
2.5 主从配置
2.5.1 修改从库的My.cnf文件
2.5.2 重启从库
service mysql restart
2.5.3 检测从库的二进制
检测从库的二进制日志是否成功
2.6 主从挂载
2.6.1 查看主库状态
说明:
主库创建完成后应该告诉从库,主库的二进制日志名称和二进制日志的位置.这时从库才能根据位置实现实时备份.
/*查询主库的状态 file表示二进制文件名称 position表示主库默认位置*/
SHOW MASTER STATUS;
2.6.2 实现主从挂载
说明:数据库中的主从复制,实质就是将从库挂载到主库的操作.
/*
主从挂载的语法
1.chage master to 主机host="IP地址",主机port=3306,
主机user="root",主机password="root",
主机二进制文件名称="mysql-bin-00001",主机pos=120
*/
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表示主从复制成功.
3 实现双机热备
说明:
在实际开发过程中,很少单独的使用主从复制.为了实现主库和从库严格的数据备份.在公司中采用双机热备的形式.
好处:如果实现了双机热备,及时有一台数据库宕机,也不会影响数据同步.应该宕机的这台数据库会监听另外一台主机.实时读取二进制日志文件,实现数据同步.
设计图:
3.1 双机热备的步骤
3.1.1 查看从的状态
3.1.2 实现主从挂载
说明:
实现双机热备时,应该在Master中挂载slave.
/*实现双机热备—另外一台主机*/
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
/*启动slave*/
START SLAVE
/*查看状态*/
SHOW SLAVE STATUS
3.1.3 效果展现:
说明:这时无论修改主机还是从机都可以实现数据的同步.这样做更具有通用性.
4 主从复制中遇到的问题
4.1 主库问题
4.1.1 检测主库中的二进制日志文件是否启动
Cd /var/lib/mysql 查询是否还有二进制文件
4.1.2 从库的挂载时IP是否正确
说明:从库挂载主库时应该向主库看齐,写主库的IP
4.1.3 密切关注主库的Posion
4.1.4 从库启动
如果挂载失败,先将slave关闭
/*如果需要停止服务*/
STOP SLAVE
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;
4.1.5 检测主从server-id是否相同
说明:切记修改主库和从库的server-id
主库:server-id=1
从库:server-id=2
4.1.6 挂载数据时最好保证数据一致.
说明:如果还是挂载不成功,设法将主库和从库数据保持一致.