Mysql读写分离
背景:
在web网站开发当中,网站优化是一门高深的学问:主要可以用到两个方面的技术:
缓存技术
- 数据库缓存
- 文件缓存
- 雪碧图
负载均衡技术
- 数据库的主从备份(读写分离)
在日常工作当中,可能遇到同样一个数据库,有的表查询频繁,比如文章表,信息表,有的表插入频繁,比如注册表。用同一台mysql服务器完成大量的查询和插入事务,效率较低,于是就需要使用mysql的主从备份:
主从备份搭建:
1、环境准备,两台Centos7虚拟机
master主库:10.10.21.73
salve从库:10.10.21.130
测试连通性:
2、两台虚拟机安装mariadb服务并启动服务
10.10.21.73主库
10.10.21.130从库
3、为root用户设置密码
配置mariadb的生产模式,默认yum安装的mariadb是一种宽松的开发模式,任何账号,不通过密码都可以进入。如果在生产环境需要开启生产模式,这个模式也是主从备份必须的:
mysql_secure_installation
主库设置:
从库root密码配置:同上
4、主库(服务器端)10.10.21.73配置:
创建要进行备份的数据库
create database OurBlog charset=utf8;
对从库(客户端)进行授权:
grant replication slave on *.* to "root"@"%" identified by '123' with grant option;
刷新授权表
flush privileges;
创建备份表
create table article(id int primary key auto_increment,title char(32));
数据库导出(为避免从库自己创建时,一遍结构或者编码导致的不兼容)
mysqldump -h localhost -u root -p123 OurBlog > Ourblog.sql
使用scp将文件传递到10.10.21.130从库的opt下:
5、从库(客户器端)10.10.21.130配置:
查看OurBlog.sql文件是否传输过来:
在导入数据库之前,客户端10.10.21.130上创建OurBlog数据库(因为我们所导入数据库一般指的是数据库表及表数据)
把10.10.21.73上的数据库导入到从库:
mysql -h localhost -u root -p123 OurBlog < Ourblog.sql
查看导入效果:
6、关闭主从服务器的防火墙和selinux
主库10.10.21.73
从库10.10.21.130
7、修改主库(10.10.21.73)的配置文件
vim /etc/my.cnf
在[mysqld]下添加如下配置
- sever-id=1
- log_bin=mysql-bin?
- binlog-do-db=OurBlog
- binlog-ignore-db=mysql
重启mariadb服务:
8、修改从库(10.10.21.130)的配置文件
vim /etc/my.cnf
在[mysqld]下添加如下配置
- sever-id=2
- log_bin=mysql-bin?
- binlog-do-db=OurBlog
- binlog-ignore-db=mysql
重启服务
9、查看主服务器10.10.21.73的状态
show master status;
记录file文件名和position的文件名和值,后面客户端备份配置有用
10、从库(10.10.21.130)开始备份配置
-> change master to master_host='10.10.21.73',
-> master_user='root',
-> master_password='123',
-> master_log_file='mysql-bin?.000001',
-> master_log_pos=245;
启动备份:
slave start;
查看从库备份状态:
show slave status\G;
如果上图出现了NO,解决方法:
- 1、停止备份: slave stop
- 2、退出mysql 重新启动服务端和客户端的mysql: systemctl restart mariadb
- 3、开始备份:slave start
11、测试主从备份的效果
查看从数据库(10.10.21.130)OurBlog.article没有任何数据
主库(10.10.21.73)插入数据
查看从库备份情况:(已成功备份)