mysql----高并发、高可用

mysql主从复制

通常,一个应用程序连接一个数据库,但是当读写并发量高的时候,单个mysql服务器的压力就会很大,还可能出现单点故障。

为了提高mysql服务的高并发、高可用性,可以采用主从复制架构,实现读写分离。
在这里插入图片描述
原理:

  1. 当master主节点进行写入操作时(insert/delete/update),写入数据库的同时,还会将操作记入binlog;
  2. master主机有多少个slave从节点,就会创建多少个binlog的dump线程,当dump线程监听到binlog发生改变,就会通知对应的从节点,并将binlog内容发送给从节点;
  3. slave从节点的I/O线程接收到binlog内容,会存储到本地的relay-log(中继日志);
  4. 从节点的SQL线程就会读取本地的中继日志,按照对应的操作写入本地的数据库。

实现mysql主从复制

主节点:192.168.0.113
OS: ubuntu1804
MySQL: 5.7.41

从节点:192.168.0.108
OS:CentOS8
MySQL: 5.7.38
查看版本:mysqld --version
任选一个作为主节点,这里选择Ubuntu。

  1. 连接主节点,授权可以复制到从节点。
mysql -u lauf -p 

# 用户存在的情况下,可以不用创建用户;
mysql>create user  tom@"%" identified by 'tom123';
# 授权复制到从节点
mysql>grant replication slave on *.* to 'tom'@'slave1_ip' identified by 'tom123';
mysql>flush privileges;

  1. 配置主节点,开启bin日志。
# 切换目录
cd /etc/mysql/mysql.conf.d 

sudo vim mysqld.cnf

# 服务器唯一编号
server-id=1
# 开启binlog
log_bin=/var/log/mysql/mysql-bin.log
# binlog要同步的数据库,注释则默认同步所有的数据库
binlog_do_db=app1
binlog_do_db=app2  # 不能写在同一行
#binlog_ignore_db=db1
#binlog_ignore_db=db2
# 删除过期日志
expire_logs_days=10
# 日志的最大内存
max_binlog_size=100M
# 主节点可读可写
read-only=0

配置完成,重启mysql

问题:修改msyql的用户、用户组后无法启动,权限问题,只需创建/var/run/mysqld目录,并分配给当前用户即可。(主机重启问题重现)
在这里插入图片描述

  1. 查看主节点的状态
# 连接 mysql
mysql>show master status

在这里插入图片描述

  1. 配置从节点
    简单增加一个server-id=唯一值
# centos 配置mysql
cd /etc/
sudo vim my.cnf

# 增加一个server-id=2
# 重启mysql
sudo service mysqld restart
  1. 设置从节点的主节点
# 设置 mysql主节点,端口无引号
mysql>change master to master_host='192.168.0.113',master_port=3306,master_user='tom',master_password='tom123',master_log_file='mysql-bin.000002',master_log_pos=154;

# 启动从节点
mysql>start slave;    # stop slave
mysql>show slave status\G;

在这里插入图片描述
从节点的IO线程、SQL线程必须是运行状态。

问题: 如下可能为主节点未配置远程连接或者没有授权复制。
在这里插入图片描述

  1. 测试,在主节点创建一个数据库,查看从节点。
    一定要在创建完成主从后,再在主节点创建数据库、表、插入数据。
# 主节点创建数据库,并查看从节点(有库则成功)
mysql>create database test_replica default charset utf8;

mysql>use test_replica;

# 创建表,并查看从节点
mysql>create table stu(id int primary key auto_increment, name varchar(30), age int)engine=innodb;

# 插入数据,并查看从节点
mysql>insert into stu values(1, 'jack', 23);

只有主节点有写入操作(语句)时,即binlog发生改变,dump线程才通知从节点,并将binlog推送给从节点,从节点再同步数据。
 

问题点

  1. mysql版本必须一致,避免版本问题
  2. 主从同步数据延时问题

远程连接

  1. 连接主节点
# 可以连接
mysql -u tom -p -h 192.168.0.113
  1. 远程连接centos的mysql 从节点
    授权用户任意节点登录即可。
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

laufing

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值