优化,web网站的优化
缓存技术
数据库缓存 redis
⽂件缓存
图⽚ fastdfs
负载均衡
nginx
数据库主从备份,读写分离
·
在⼯作中,为了防⽌数据损坏,使⽤主从备份这种架构(复制集),为了满⾜mysql的性能要求,为了提⾼吞吐量使⽤复制集之后还可搭建读写分离去提⾼性能。
·
⒈搭建主从
两台centos环境,安装mysql
master. 10.10.14.154
slave 10.10.14.244
·
mariadb 是使用yum 安装的,默认是一种宽松的开放模式。任何账号都可以登录、没有密码。配置mariadb为生产模式。
在master 和slave 都需要操作的
mysql 安全向导
mysql_secure_installation
·
systemctl restart mariadb 重启服务
mysql -u root -p 使⽤密码登陆
·
——————————————————————————————————————————————
⒉Master 库 操作
create database OurBlog charset=utf8;
设置权限
grant replication slave on *.* to "root"@"%" identified by "111111" with grant option;
刷新授权
flush privileges;
使⽤库
use OurBlog
创建表
create table article(id int primary key auto_increment,title char(32));
退出数据库
exit
cd /opt/
导出库,原因:主从备份只备份数据,不会备份库,表,需要导出库,然后在从库中导⼊
mysqldump -h localhost -u root -p111111 OurBlog>OurBlog.sql
将导出的sql⽂件。拷⻉到salve服务器上
scp OurBlog.sql root@10.10.14.244:/opt/
·
⒊slave库操作
systemctl restart mariadb
mysql -uroot -p
create database OurBlog charset=utf8;
exit
将刚导⼊的sql⽂件导⼊到salve库中
mysql -h localhost -u root -p111111 OurBlog < /opt/OurBlog.sql
·
⒋主从服务器同时关闭防火墙,临时关闭安全模式
systemctl stop firewalld
setenforce 0
——————————————————————————————————————————————
⒌master修改配置⽂件
vim /etc/my.cnf
增加代码
server-id=1
log_bin=mysql-bin?
binlog-do-db=OurBlog
binlog-ignore-db=mysql
保存⽂件
重启 mariadb服务
systemctl restart mariadb
第一行代码:设置服务器id, =1表示主服务器
第二行代码:启动mysql二进制日志系统
第三行代码:需要同步的数据库名字。如果有多个数据库,可重复此行代码,只需要修改库名。每一库占用一行
第四行代码:不同步mysql系统库
·
⒍slave库修改配置文件
修改配置⽂件
vim /etc/my.cnf
增加下⾯代码
server-id=2
log_bin=mysql-bin?
binlog-do-db=OurBlog
binlog-ignore-db=mysql
保存
重启mariadb服务
systemctl restart mariadb
此处=2表示从库服务器
·
⒎master配置
在主库服务器上输入命令:
show master status;
查看主库状态
file:二进制的文件
position:位置(从哪开始,类似于指针)
·
⒎slave配置
关闭备份
stop slave
根据主库状态信息输入命令:
change master to master_host="10.10.14.154",master_user="root",master_password='111111',mast er_log_file="mysql-bin?.000001",master_log_pos=245;
开始备份
start slave
输入命令查看slave库状态
show slave status \G;
当
slave_IO_Running:Yes
slave_SQL_Running:Yes
此时说明配置成功
否则:
IO线程出问题:就是master 与 slave链接出问题了。可能账号、密码(授权的密码,而不是数据库密码)或配置文件等出问题。
SQL线程出问题:就是slave 与中继器日志之间出现问题。
·
如果数据表中已有数据,那么我们如果要搭建主从关系。就在主表导出数据的时候,把导出的数据直接导入从表之中,然后从表从一开始就拥有主表之前的数据,再对主表进行实时监听。
在从库中:
start slave与slave start
stop slave与slave stop
效果是一样的
在master库中查看状态:
不需要\G
因为它显示出来的就是一个表
·
——————————————————————————————————————————————
在 master 中写入数据,然后在 slave 中查看数据。
①、Master 主库
slave 从库
②、binary log 二进制文件。
relay log 中继器日志
③、I/O thread I/O线程
SQL thread sql线程
执行原理:
⒈当客户端发起 更新(insert delete update)操作, 操作的 master 库(事务)由 master 服务将 sql 语句转为二进制,存储到二进制日志文件中,然后执行 commit 操作,将事务结果存储到 master 库当中。
⒉slave 开通一个 io 线程,线程阻塞等待,一直监听二进制文件是否有更新。如果有,读取到中继器当中,但提交到中继器中的内容不会及时更新,如果没有,继续等待。
⒊sql 线程会定期查看中继器中的内容,它如果觉得改动比较小,算不得一次版本升级,就不一定会将更新内容写入 slave 库当中。但是,它会无限重复第二步的操作。其中,当它觉得达到版本升级要求时,会更新到 slave库。