一、MySQL主从读写分离概念
1.什么是Mysql主从分离
将读操作和写操作分离到不同的数据库上,避免主服务器出现性能瓶颈;主服务器进行写操作时,不影响查询应用服务器的查询性能,降低阻塞,提高并发; 数据拥有多个容灾副本,提高数据安全性,同时当主服务器故障时,可立即切换到其他服务器,提高系统可用性;
2.为什么要实现Mysql主从分离
大型网站为了软解大量的并发访问,除了在网站实现分布式负载均衡,远远不够。到了数据业务层、数据访问层,如果还是传统的数据结构,或者只是单单靠一台服务器扛,如此多的数据库连接操作,数据库必然会崩溃,数据丢失的话,后果更是 不堪设想。这时候,我们会考虑如何减少数据库的联接,一方面采用优秀的代码框架,进行代码的优化,采用优秀的数据缓存技术如:memcached,如果资金丰厚的话,必然会想到假设服务器群,来分担主数据库的压力。
二、docker安装MySQL
1.下载MySQL5.7
docker pull mysql:5.7
2.创建MySQL相关文件夹
mkdir -p /docker/mysql/log # 日志文件
mkdir -p /docker/mysql/data # 数据文件
mkdir -p /docker/mysql/conf # 配置文件
3.新建MySQL配置文件my.cof,该文件放到/docker/mysql/conf路径下
vim /docker/mysql/conf/my.cnf
内容:
1.[client]
2.default_character_set=utf8
3.[mysqld]
4.collation_server = utf8_general_ci
5.character_set_server = utf8
4.启动MySQL
docker run -d --name mysql -p 3306:3306 --privileged=true -v /docker/mysql/log:/var/log/mysql -v /docker/mysql/data:/var/lib/mysql -v /docker/mysql/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
三、MySQL主从库配置
1.配置主库
(1).master上配置bin-log日志
修改主库的配置文件:vim docker/mysql/conf/my.cnf,如下内容,修改配置后需要重启mysql服务器。
log-bin= master-bin #[必须]启用二进制日志
log-bin-index=master-bin.index
server-id = 4 #[必须]服务器唯一ID,默认是1,最好取ip的后3位
expire-logs-days = 7 #只保留7天的二进制日志,以防磁盘被日志占满
(2).测试log_bin是否成功开启
show variables like '%log_bin%';
log_bin为ON则表示开启成功,OFF表示开启失败
(3).查看主服务器状态
show master status
2.配置从库
(1).slave上配置relay-log
修改从库的配置文件:vim docker/mysql/conf/my.cnf,如下内容,修改配置后需要重启mysql服务器。
relay-log-index=slave-relay-bin.index
relay-log=slave-bin
server-id=22 #只要和master的server-id不一样就可以了
四、关联主从服务器
1.主服务器配置
(1).master数据库建立备份账号
该语句须在主库执行
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.2.13' IDENTIFIED BY '123456';
FLUSH PRIVILEGES;
USE mysql;
repl为用户名,192.168.2.13代表从数据库的主机地址,如上表示远程地址为密码为123456的,用户名是repl就可以连接到master主机,并为其授予 replication slave 权限。123456为master的连接密码。
SELECT user,authentication_string,HOST FROM user;
2.从服务器配置
(1).slave数据库配置操作
注:如果启动slave后,该语句无法执行第二次,需要将slave停止才能执行
其中的master_log_file和master_log_pos,就是主库中File和Position,在主库中使用 show master status;就可以看到了。
该语句须在从库执行
CHANGE MASTER TO master_n ='192.168.2.7',
master_port = 3306,
master_user ='repl',
master_password ='123456',
master_log_file ='master-bin.000008',
master_log_pos = 502;
去主库查看状态
show master status;
(2).启动、停止slave(打开/停止主从同步)
start slave;
stop slave;
(3).查看slave从机的状态
show slave status;
在从库状态中看到以下状态则说明启动成功
注:如果Slave_SQL_Running为NO,执行以下操作
stop slave;
SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1;
五、主从验证
1.在主库创建一个数据库
2.去从库中查看是否有该数据库