1.使用主从数据库主要是为了读写分离,在数据库集群架构中,让主库负责处理事务性查询,而从库只负责处理select查询,让两者分工明确达到提高数据库整体读写性能。当然,主数据库另外一个功能就是负责将事务性查询导致的数据变更同步到从库中,也就是写操作。
2.读写分离的好处:
(1)分摊服务器压力,提高机器的系统处理效率
读写分离适用于读远比写的场景,如果有一台服务器,当select很多时,update和delete会被这些select访问中的数据堵塞,等待select结束,并发性能并不高,而主从只负责各自的写和读,极大程度的缓解X锁和S锁争用;
假如我们有1主3从,不考虑上述1中提到的从库单方面设置,假设现在1分钟内有10条写入,150条读取。那么,1主3从相当于共计40条写入,而读取总数没变,因此平均下来每台服务器承担了10条写入和50条读取(主库不承担读取操作)。因此,虽然写入没变,但是读取大大分摊了,提高了系统性能。另外,当读取被分摊后,又间接提高了写入的性能。所以,总体性能提高了,说白了就是拿机器和带宽换性能;
(2)增加冗余,提高服务可用性,当一台数据库服务器宕机后可以调整另外一台从库以最快速度恢复服务
3.由于比较大的项目数据库一般也比较大,所以我们每天要对数据库进行备份,如果在主数据库中备份,将会影响到主数据库的性能和稳定,所以我们可以把备份程序写在从数据库里面,从而减轻服务器压力。
(1).确定主从服务器地址(准备环境):
两台Linux操作系统 ip分别为: 172.27.185.1(主)、172.27.185.2(从)
(2).连接到主服务(172.27.185.1)数据库服务器上,给从节点分配账号权限。
GRANT REPLICATION SLAVE ON *.* TO '用户名'@'从数据库地址' IDENTIFIED BY '密码';
例如:GRANT REPLICATION SLAVE ON *.* TO 'root'@'172.27.185.2' IDENTIFIED BY '123456';
(3).在主数据库/etc/my.cnf(或my.ini)文件,添加:
server-id=107(不可重复)
log-bin=/var/lib/mysql/mysql-bin
(4).重启主数据库:service mysqld restart
(5)备份主数据库数据前需要加上读锁: flush tables with read lock;
执行show master status;(此处记住File名称和Position值,后面slave服务器配置时需要用到)
(6)备份主数据库
(7)在从服务器(172.27.185.2)/etc/my.cnf(或my.ini)文件添加server-id=109(不可重复)并重启数据库(service mysqld restart)
(8)从服务器(172.27.185.2)执行:
stop slave;
change
master to master_host='172.27.185.1',master_user='root',master_password='123456',
master_port=3306, master_log_pos=713, master_log_file='mysql-bin.000001';
start slave;
(9)测试是否连接成功:show slave status;
这两个为yes即可
(10)关闭主数据库的锁:unlock tables;
(1).一定要在同一个局域网中
(2).注意设置防火墙白名单
(3).注意主从的初始数据一定要一样,不然会出问题,所以备份数据一定要设置读锁,而且需要将web项目停掉,防止使用数据库
(4).还有一些问题的话大家可以在评论区讨论,大家一起进步