MySQL主从复制与读写分离的实现

mysql 主从复制用途

  • 实现灾备
  • 读写分离,提供查询服务
  • 备份,避免影响业务

主从部署必要条件:

  • 主库开启binlog日志(设置log-bin参数)
  • 主从server-id 不同
  • 从库服务器能连通主库

复制原理:

  • master将改变记录到二进制日志(binary log)中(这些记录叫做二进制日志事件,binary log events);
  • slave将master的binary log events拷贝到它的中继日志(relay log);
  • slave重做中继日志中的事件,将更改应用到自己的数据上。

问题及解决方法:

mysql 主从复制存在的问题:
- 主库宕机后,数据可能丢失
- 从库只有一个sql Thread ,主库写压力大,复制很可能延时
解决方法:
- 半同步复制—解决数据库丢失的问题
- 并行复制— 解决从库复制延迟的问题

node1主节点 192.168.243.7

[root@centos7 ~]#vim /etc/my.cnf.d/server.cnf 
  9 [server]
 10 innodb_file_per_table=ON
 11 skip_name_resolve=ON
 12 max_connections=20000    最大连接数根据情况而定

 13 log_bin=master-log
 14 server_id=1
[root@centos7 ~]#systemctl start mariadb.service 
MariaDB [(none)]> show master status;
-------------------+----------+--------------+------------------+
| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| master-log.000003 |      245 |              |                  |
+-------------------+----------+--------------+------------------

MariaDB [(none)]> GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO 'repluser'@'192.168.243.%' IDENTIFIED BY 'CENTOS';

MariaDB [(none)]> FLUSH PRIVILEGES;

MariaDB [(none)]> SHOW MASTER STATUS;
+-------------------+----------+--------------+------------------+
| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| master-log.000003 |      497 |              |                  |
+-------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

node2 从节点 192.168.243.9

[root@R2 ~]#vim /etc/my.cnf.d/server.cnf 
 9 [server]
 10 skip_name_resolve=on
 11 innodb_file_per_table=on
 12 max_connections=20000
 13 
 14 relay_log=relay-log
 15 server_id=2

MariaDB [(none)]> CHANGE MASTER TO MASTER_HOST='192.168.243.7',MASTER_USER='repluser',MASTER_PASSWORD='CENTOS',MASTER_LOG_FILE='master-log.000003',MASTER_LOG_POS=497;
MariaDB [(none)]> SHOW SLAVE STATUS\G;    查看从节点状态
MariaDB [(none)]> START SLAVE IO_THREAD,SQL_THREAD;   启动线程

此时我们在主服务器上创建一个数据库,可以发现从服务器上显示刚创建的新数据库
主:MariaDB [(none)]> create database mydb;
从:MariaDB [(none)]> show databases;

mysql的读写分离:
     基于ProxySQL 的读写分离,在主数据库上只执行写操作,在从服务器上执行读操作。这样可以分散数据的读写压力。
实验环境: 清空防火墙规则,关闭selinux ,时间同步
三台主机
proxysql :192.168.243.7
node1(主数据库服务器)192.168.243.8
node2(从数据库服务器)192.168.243.9
两台数据库做主从同步

官网下载的proxysql包

[root@centos7 ~]#yum -y install  proxysql-1.4.2-1-centos7.x86_64.rpm 
[root@centos7 ~]#cp /etc/proxysql.cnf{,.bak}
[root@centos7 ~]#vim /etc/proxysql.cnf  
 9 datadir="/var/lib/proxysql"
 10 
 11 admin_variables=
 12 {
 13         admin_credentials="admin:admin"
 14 #       mysql_ifaces="127.0.0.1:6032;/tmp/proxysql_admin.sock"
 15         mysql_ifaces="0.0.0.0:6032"
 16 #       refresh_interval=2000
 17 #       debug=true
 18 }
 20 mysql_variables=
 21 {
 22         threads=4          #启动多少个线程链接mysql 
 23         max_connections=2048       #最大并发链接数 
 24         default_query_delay=0          #默认查询延迟
 25         default_query_timeout=36000000        #默认查询超时时间 
 26         have_compress=true        #是否压缩 
 27         poll_timeout=2000 
 28         interfaces="0.0.0.0:6033;/tmp/proxysql.sock"
 29 #       interfaces="0.0.0.0:6033"
 30         default_schema="information_schema"
 31         stacksize=1048576         #栈大小
 32         server_version="5.5.30"
 33         connect_timeout_server=3000    
 36         monitor_username="monitor"
 37         monitor_password="monitor"
 38         monitor_history=600000            #保留的监控历史时长 
 39         monitor_connect_interval=60000    #链接后端主机的超时时间长 
 40         monitor_ping_interval=10000
 41         monitor_read_only_interval=1500
 42         monitor_read_only_timeout=500
 43         ping_interval_server_msec=120000
 44         ping_timeout_server=500
 45         commands_stats=true
 46         sessions_sort=true 
 47         connect_retries_on_failure=10       #连接失败后的重试间隔 
 48 }
 52 mysql_servers =
 53 (
 54         {
 55                 address = "192.168.243.8" 
 56                 port = 3306           
 57                 hostgroup = 0           # no default, required
 58                 status = "ONLINE"     # default: ONLINE
 59                 weight = 1            # default: 1
 60                 compression = 0       # default: 0
 61 #   max_replication_lag = 10 
 62         },
 63         {
 64                 address = "192.168.243.9"
 65                 port = 3306
 66                 hostgroup = 1
 67                 status = "ONLINE"
 68                 weight = 1
 69                 compression = 0
 70         }#注意没有逗号

#定义与数据库连接时使用的账号信息
 90 mysql_users:
 91 (
 92         {
 93                 username = "root" # no default , required
 94                 password = "CENTOS" # default: ''
 95                 default_hostgroup = 0 # default: 0
 96                 max_connections=1000   
 97                 default_schema="mydb"
 98                 active = 1            # default: 1
 99         }
#查询规则
114 mysql_query_rules:
115 (
130 )
#调度器
132 scheduler=
133 (
145 )
148 mysql_replication_hostgroups=
149 (
150         {
156                 writer_hostgroup=0         #写组
157                 reader_hostgroup=1        #读组
159         }
160 )
[root@centos7 ~]#systemctl  restart proxysql.service 
[root@proxy ~]# ss -ntl

看到管理接口的端口是6032, 客户端接口的端口是6033
登陆:

[root@centos7 ~]#mysql -udbadmin -pCENTOS   -h 192.168.243.8
[root@centos7 ~]#mysql -S /tmp/proxysql_admin.sock -uadmin -padmin
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值