mysql的主从复制和读写分离

打印 上一主题 下一主题

主题 645|帖子 645|积分 1935

mysql的主从复制和读写分离

先有主从复制才有读写分离,高可用…
主从复制

特点:主从复制的模式,主可以复制到从,从不可以复制到主
高可用架构,小的一般都是一主两从,大的两主三从
耽误怎么解决::
1.网络标题,防火墙的原因
2.硬件设备标题,cpu,内存和磁盘出了标题也会导致这个标题.
3.设置文件写错了
主从复制的模式

mysql默认模式

异步模式,主库在更新完事故之后,会立即把结果返回给从服务器,并不关心从库是否担当到,以及从库是否处理成功
快,效率高
假如没有成功,可能是网络标题没有同步,或者是其他因素的影响导致同步失败
全同步模式

主库在更新完事故之后,立即把结果返回到从库,全部的从库实行完毕之后,才气继承下一个同步.
安全,但是性能低
半同步复制

介乎于异步和全同步之间,主库更新完事故之后,也是同步到从库,同步完成之后,有一个等待时间,等待时间是一个tcp/ip的来回时间
5毫秒左右.
既在一定水平上包管了效率,也在一定水平上包管了数据的完整性
主主模式

都是主,可以相互复制
双一设置

设置文件当中举行设置的方式提高数据的安全性,也就是双一设置
条件是:数据库的存储引擎要是innodb
  1. #查看
  2. vim /etc/my.cnf
  3. #工具
  4. #每次提交都会刷新事务日志,确保事务的是持久性,但是会影响性能.
  5. innodb_flush_log_at_trx_commit=1
  6. #每次提交事务,将二进制日志的内容保存到磁盘,确保日志的持久性,也是提高安全性.
  7. sync_binlog=1
复制代码
性能化设置

  1. #最多提交几次事务会进行磁盘刷新,日志内容保存到磁盘
  2. sync_binlog=10
  3. #每次更新都保存到内存中,不进行刷新,不建议设置
  4. innodb_flush_log_at_trx_commit=2
  5. #控制innodb缓冲池的大小,增大可以提高数据库的性能,但是占用的是系统内存,配置的时候要注意合理化时间.
  6. inddodb_buffer_pool_size
复制代码
怎样实现

条件:
1.基于mysql的二进制日志,根据主库的二进制文件的标记位,实现主和从的同步
2.主从服务器之间,服务器的时间要同步.
架构:
三台服务器
  1. #192.168.118.10        主
  2. systemctl stop firewalld
  3. setenforce 0
  4. yum -y install ntpdate -y
  5. date
  6. ntpdate ntp.aliyun.com
  7. vim /etc/my.cnf
  8. server-id = 1
  9. log-bin = master-bin
  10. binlog_format = MIXED
  11. #允许从服务器从主主库复制数据时可以写入自己的二进制日志当中
  12. log-slave-updates = true
  13. :wq
  14. systemctl restart mysqld
  15. mysql -u root -p123456
  16. CREATE USER 'myslave'@'192.168.118.%' IDENTIFIED WITH mysql_native_password BY '123456';
  17. GRANT REPLICATION SLAVE ON *.* TO 'myslave'@'192.168.118.%';
  18. FLUSH PRIVILEGES;
  19. show master status;
复制代码
  1. #192.168.118.20        从
  2. systemctl stop firewalld
  3. setenforce 0
  4. yum -y install ntpdate -y
  5. date
  6. ntpdate ntp.aliyun.com
  7. vim /etc/my.cnf
  8. server-id = 2
  9. relay-log = relay-log-bin
  10. relay-log-index = slave-relay-bin.index
  11. relay_log_recovery = 1
  12. :wq
  13. systemctl restart mysqld
  14. mysql -u root -p123456
  15. CREATE USER 'myslave'@'192.168.118.%' IDENTIFIED WITH mysql_native_password BY '123456';
  16. GRANT REPLICATION SLAVE ON *.* TO 'myslave'@'192.168.118.%';
  17. FLUSH PRIVILEGES;
  18. change master to
  19. master_host='192.168.118.10',master_user='myslave',master_password='123456',master_log_file='master-bin.000001',master_log_pos=559;
  20. start slave;
  21. show slave status\G;
  22. #查看slave_IO_Running:yes,Slave_SQL_Running:yes
  23. #IO就是读写,从库和主机的读写通信是否正常,sql是slavemysql进程状态是否正常.
  24. #stop slave;
  25. #reset slave;
  26. #star slave;
复制代码
  1. #192.168.118.30        从
  2. systemctl stop firewalld
  3. setenforce 0
  4. yum -y install ntpdate -y
  5. date
  6. ntpdate ntp.aliyun.com
  7. vim /etc/my.cnf
  8. server-id = 3
  9. relay-log = relay-log-bin
  10. #二进制日志的索引文件的名称
  11. relay-log-index = slave-relay-bin.index
  12. 配置从服务器在启动时是否执行二进制日志的回复操作(和主库同步),1表示开始
  13. relay_log_recovery = 1
  14. :wq
  15. systemctl restart mysqld
  16. mysql -u root -p123456
  17. CREATE USER 'myslave'@'192.168.118.%' IDENTIFIED WITH mysql_native_password BY '123456';
  18. GRANT REPLICATION SLAVE ON *.* TO 'myslave'@'192.168.118.%';
  19. FLUSH PRIVILEGES;
  20. 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;
  21. start slave;
  22. show slave status\G;
  23. #查看slave_IO_Running:yes,Slave_SQL_Running:yes
  24. #IO就是读写,从库和主机的读写通信是否正常,sql是slavemysql进程状态是否正常.
  25. #stop slave;
  26. #reset slave
  27. #star slave;
复制代码
读写分离

主从架构当中,主库只负责写,从库只负责读.
读写分离的方式:

1.代码 开发人员纯靠代码完成,涉及到数据库的二次开发,性能好,不需要额外的硬件设备
2.中间层代理,代理服务器,在客户端和主从架构之间有一个代理服务器,代理服务器收到客户端的请求之后,通过客户端的sql语句来举行判断,读转到从,写转到主.
Ameoeba:读写分离最常见的客户端代理软件,java代码开发的一个软件.
  1. #192.168.118.40 jdk1.6 Amoeba 代理服务器
  2. systemctl stop firewalld
  3. setenforce 0
  4. cd /opt
  5. #将amoeba-mysql-binary-2.2.0.tar.gz扔进xshell
  6. #将jdk-6u14-linux-x64.bin扔进xshell里
  7. chmod 777 jdk-6u14-linux-x64.bin
  8. ./jdk-6u14-linux-x64.bin
  9. #一直空格,最后yes
复制代码
  1. #192.168.118.50 mysql MariaDB 客户端
  2. systemctl stop firewalld
  3. setenforce 0
  4. cd /opt
复制代码
修改数据库uuid流程

启动MySQL服务
  1. systemctl restart mysqld
复制代码
进入数据库
  1. mysql -u root -p123456
复制代码
我们的数据库都一样,用户root,暗码123456
  1. #进入数据库操作
  2. select uuid();
  3. #adb47ee3-4966-11ef-b53c-000c2985c62d
  4. #e1e89d7e-4966-11ef-b53c-000c29177a3d
  5. #090271c2-4967-11ef-b53c-000c29ca8eb8
  6. #使用uuid函数生成新的uuid,在下方框里会生成新的uuid,把它复制下来保存,就是很长的那一段
  7. show variables like 'datadir';
  8. #查看auto.cnf文件存放的目录,在下方框里显示
  9. #这一步可以不用做,因为我们源码安装的MySQL
  10. #我们的auto.cnf存放的目录都是/usr/local/mysql/data/
  11. quit
  12. #退出数据库
复制代码
修改auto.cnf文件
  1. vim /usr/local/mysql/data/auto.cnf
  2. server-uuid=(填入刚才生成的新的uuid)
复制代码
重启MySQL服务
  1. systemctl restart mysqld
复制代码
数据库uuid修改完成

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

用户国营

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表