mysql的主从复制和读写分离
先有主从复制才有读写分离,高可用…
主从复制
特点:主从复制的模式,主可以复制到从,从不可以复制到主
高可用架构,小的一般都是一主两从,大的两主三从
耽误怎么解决::
1.网络标题,防火墙的原因
2.硬件设备标题,cpu,内存和磁盘出了标题也会导致这个标题.
3.设置文件写错了
主从复制的模式
mysql默认模式
异步模式,主库在更新完事故之后,会立即把结果返回给从服务器,并不关心从库是否担当到,以及从库是否处理成功
快,效率高
假如没有成功,可能是网络标题没有同步,或者是其他因素的影响导致同步失败
全同步模式
主库在更新完事故之后,立即把结果返回到从库,全部的从库实行完毕之后,才气继承下一个同步.
安全,但是性能低
半同步复制
介乎于异步和全同步之间,主库更新完事故之后,也是同步到从库,同步完成之后,有一个等待时间,等待时间是一个tcp/ip的来回时间
5毫秒左右.
既在一定水平上包管了效率,也在一定水平上包管了数据的完整性
主主模式
都是主,可以相互复制
双一设置
设置文件当中举行设置的方式提高数据的安全性,也就是双一设置
条件是:数据库的存储引擎要是innodb
- #查看
- vim /etc/my.cnf
- #工具
- #每次提交都会刷新事务日志,确保事务的是持久性,但是会影响性能.
- innodb_flush_log_at_trx_commit=1
- #每次提交事务,将二进制日志的内容保存到磁盘,确保日志的持久性,也是提高安全性.
- sync_binlog=1
复制代码 性能化设置
- #最多提交几次事务会进行磁盘刷新,日志内容保存到磁盘
- sync_binlog=10
- #每次更新都保存到内存中,不进行刷新,不建议设置
- innodb_flush_log_at_trx_commit=2
- #控制innodb缓冲池的大小,增大可以提高数据库的性能,但是占用的是系统内存,配置的时候要注意合理化时间.
- inddodb_buffer_pool_size
复制代码 怎样实现
条件:
1.基于mysql的二进制日志,根据主库的二进制文件的标记位,实现主和从的同步
2.主从服务器之间,服务器的时间要同步.
架构:
三台服务器
- #192.168.118.10 主
- systemctl stop firewalld
- setenforce 0
- yum -y install ntpdate -y
- date
- ntpdate ntp.aliyun.com
- vim /etc/my.cnf
- server-id = 1
- log-bin = master-bin
- binlog_format = MIXED
- #允许从服务器从主主库复制数据时可以写入自己的二进制日志当中
- log-slave-updates = true
- :wq
- systemctl restart mysqld
- mysql -u root -p123456
- CREATE USER 'myslave'@'192.168.118.%' IDENTIFIED WITH mysql_native_password BY '123456';
- GRANT REPLICATION SLAVE ON *.* TO 'myslave'@'192.168.118.%';
- FLUSH PRIVILEGES;
- show master status;
复制代码- #192.168.118.20 从
- systemctl stop firewalld
- setenforce 0
- yum -y install ntpdate -y
- date
- ntpdate ntp.aliyun.com
- vim /etc/my.cnf
- server-id = 2
- relay-log = relay-log-bin
- relay-log-index = slave-relay-bin.index
- relay_log_recovery = 1
- :wq
- systemctl restart mysqld
- mysql -u root -p123456
- CREATE USER 'myslave'@'192.168.118.%' IDENTIFIED WITH mysql_native_password BY '123456';
- GRANT REPLICATION SLAVE ON *.* TO 'myslave'@'192.168.118.%';
- FLUSH PRIVILEGES;
- change master to
- master_host='192.168.118.10',master_user='myslave',master_password='123456',master_log_file='master-bin.000001',master_log_pos=559;
- start slave;
- show slave status\G;
- #查看slave_IO_Running:yes,Slave_SQL_Running:yes
- #IO就是读写,从库和主机的读写通信是否正常,sql是slavemysql进程状态是否正常.
- #stop slave;
- #reset slave;
- #star slave;
复制代码- #192.168.118.30 从
- systemctl stop firewalld
- setenforce 0
- yum -y install ntpdate -y
- date
- ntpdate ntp.aliyun.com
- vim /etc/my.cnf
- server-id = 3
- relay-log = relay-log-bin
- #二进制日志的索引文件的名称
- relay-log-index = slave-relay-bin.index
- 配置从服务器在启动时是否执行二进制日志的回复操作(和主库同步),1表示开始
- relay_log_recovery = 1
- :wq
- systemctl restart mysqld
- mysql -u root -p123456
- CREATE USER 'myslave'@'192.168.118.%' IDENTIFIED WITH mysql_native_password BY '123456';
- GRANT REPLICATION SLAVE ON *.* TO 'myslave'@'192.168.118.%';
- FLUSH PRIVILEGES;
- change master to master_host='192.168.118.10',master_user='myslave',master_password='123456',master_log_file='master-bin.000001',master_log_pos=857;
- start slave;
- show slave status\G;
- #查看slave_IO_Running:yes,Slave_SQL_Running:yes
- #IO就是读写,从库和主机的读写通信是否正常,sql是slavemysql进程状态是否正常.
- #stop slave;
- #reset slave
- #star slave;
复制代码 读写分离
主从架构当中,主库只负责写,从库只负责读.
读写分离的方式:
1.代码 开发人员纯靠代码完成,涉及到数据库的二次开发,性能好,不需要额外的硬件设备
2.中间层代理,代理服务器,在客户端和主从架构之间有一个代理服务器,代理服务器收到客户端的请求之后,通过客户端的sql语句来举行判断,读转到从,写转到主.
Ameoeba:读写分离最常见的客户端代理软件,java代码开发的一个软件.
- #192.168.118.40 jdk1.6 Amoeba 代理服务器
- systemctl stop firewalld
- setenforce 0
- cd /opt
- #将amoeba-mysql-binary-2.2.0.tar.gz扔进xshell
- #将jdk-6u14-linux-x64.bin扔进xshell里
- chmod 777 jdk-6u14-linux-x64.bin
- ./jdk-6u14-linux-x64.bin
- #一直空格,最后yes
复制代码- #192.168.118.50 mysql MariaDB 客户端
- systemctl stop firewalld
- setenforce 0
- cd /opt
复制代码 修改数据库uuid流程
启动MySQL服务
进入数据库
我们的数据库都一样,用户root,暗码123456
- #进入数据库操作
- select uuid();
- #adb47ee3-4966-11ef-b53c-000c2985c62d
- #e1e89d7e-4966-11ef-b53c-000c29177a3d
- #090271c2-4967-11ef-b53c-000c29ca8eb8
- #使用uuid函数生成新的uuid,在下方框里会生成新的uuid,把它复制下来保存,就是很长的那一段
- show variables like 'datadir';
- #查看auto.cnf文件存放的目录,在下方框里显示
- #这一步可以不用做,因为我们源码安装的MySQL
- #我们的auto.cnf存放的目录都是/usr/local/mysql/data/
- quit
- #退出数据库
复制代码 修改auto.cnf文件
- vim /usr/local/mysql/data/auto.cnf
- server-uuid=(填入刚才生成的新的uuid)
复制代码 重启MySQL服务
数据库uuid修改完成
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |