赞
踩
通常,一个应用程序连接一个数据库,但是当读写并发量高的时候,单个mysql服务器的压力就会很大,还可能出现单点故障。
为了提高mysql服务的高并发、高可用性,可以采用主从复制架构,实现读写分离。
原理:
主节点:192.168.0.113
OS: ubuntu1804
MySQL: 5.7.41
从节点:192.168.0.108
OS:CentOS8
MySQL: 5.7.38
查看版本:mysqld --version
任选一个作为主节点,这里选择Ubuntu。
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;
# 切换目录 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目录,并分配给当前用户即可。(主机重启问题重现)
# 连接 mysql
mysql>show master status
# centos 配置mysql
cd /etc/
sudo vim my.cnf
# 增加一个server-id=2
# 重启mysql
sudo service mysqld restart
# 设置 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线程必须是运行状态。
问题: 如下可能为主节点未配置远程连接或者没有授权复制。
# 主节点创建数据库,并查看从节点(有库则成功)
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推送给从节点,从节点再同步数据。
# 可以连接
mysql -u tom -p -h 192.168.0.113
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。