数据库不能承担起系统的高并发要求时,可以在用读写分离,实时的热备份,进行一主多从,从机承担大量的读取请求,而主机负责写入。
由主机产生二进制文件,从机进行读取并执行从而进行数据同步。
由于存在一定时间的延迟,那么这样还是适用于多读少写,或者对数据的实时性要求不是很高的网站。
数据架构可以是
一主多从,每个从机于主机直连。
一主多从,从机还能做为主机进行链式的链接,减少主机的日志读取压力,同时当主机宕机后,从机可以上来承担起主机的责任,只需要切换到新的主机。
采用docker进行启动多个mysql实例进行操作。
-
准备工作
- docker pull mysql
- 启动镜像
docker run -d -e MYSQL_ROOT_PASSWORD=root --name mysql-test mysql
- 连接镜像 安装vim,并提交新tag
docker exec -t -i mysql-test bin/sh
apt-get update
apt-get install vim
exit;
docker commit -m 'mysql install vim' mysql-test mysql:init
-
设置主机
docker run -d --name mysql-master -v /root/mysql/master:/var/lib/mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root mysql:init
连接主机实例,进入/etc/mysql/conf.d,编辑docker.cnf
在[mysqld]下面添加server-id=1 //给数据库服务的唯一标识,一般为大家设置服务器Ip的末尾号 log-bin=master-bin log-bin-index=master-bin.index
新建用户连接该机器mysql,创建一个用户‘repl’,并允许其他Slave服务器可以通过远程访问Master,通过该用户读取二进制日志,实现数据同步。
create user repl; GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.0.%' IDENTIFIED BY 'mysql';
查看 master 的日志
SHOW MASTER STATUS;
-
设置从机
启动镜像实例docker run -d --name mysql-slave -v /root/mysql/slave:/var/lib/mysql -p 3307:3306 -link mysql-master:master -e MYSQL_ROOT_PASSWORD=root mysql:init
连接主机实例,进入/etc/mysql/conf.d,编辑docker.cnf,在【mysqld】下面添加
server-id=2 relay-log-index=slave-relay-bin.index relay-log=slave-relay-bin
重启mysql
docker stop mysql-slave
docker start mysql-slave
连接从机mysql
建立从机与主机的链接change master to master_host='master', //Master 服务器Ip master_port=3306, master_user='repl', master_password='mysql', master_log_file='master-bin.000001',//Master服务器产生的日志 master_log_pos=0; start slave;//开启从机
读写分离,配置完成。可以进行测试了。