之前在文章中已经介绍过如何进行配置,当时过于仓促也就没有介绍的很明确,这里复盘下重新给大家记录下一主多从的配置和复制延迟如何处理。
这里使用一台服务器进行了多实例的安装【此方式只用于学习和测试,生产环境请使用多mysql服务】
mysql5.7 安装
这里就不多介绍了,可参照此博客进行yum安装https://blog.csdn.net/wohiusdashi/article/details/89358071
新建4个数据库实例数据存储目录
/www/server/mysqldata/3307/www/server/mysqldata/3308/www/server/mysqldata/3309/www/server/mysqldata/3310
刷新权限组为mysql
chown -R mysql.mysql /www/server/mysqldata
初始化4个实例数据库
/usr/sbin/mysqld --initialize-insecure --basedir=/var/lib/mysql --datadir=/www/server/mysqldata/3307 --user=mysql/usr/sbin/mysqld --initialize-insecure --basedir=/var/lib/mysql --datadir=/www/server/mysqldata/3308 --user=mysql/usr/sbin/mysqld --initialize-insecure --basedir=/var/lib/mysql --datadir=/www/server/mysqldata/3309 --user=mysql/usr/sbin/mysqld --initialize-insecure --basedir=/var/lib/mysql --datadir=/www/server/mysqldata/3310 --user=mysql
初始化4个实例的配置文件
4个配置文件需要修改的地方为对应的目录
替换的端口号:3307,3308,3309,3310
[client]port = 替换的端口号socket = /www/server/mysqldata/替换的端口号/mysql.sockdefault-character-set = utf8[mysqld]port = 3308socket = /www/server/mysqldata/替换的端口号/mysql.sockdatadir = /www/server/mysqldata/替换的端口号log-error = /www/server/mysqldata/替换的端口号/error.logpid-file = /www/server/mysqldata/替换的端口号/mysql.pidcharacter-set-server = utf8lower_case_table_names = 1autocommit = 1
最终4个配置都放在/www/server/mysqlconf下
启动4个实例
mysqld --defaults-file=/www/server/mysqlconf/3307.cnf --user=mysql & mysqld --defaults-file=/www/server/mysqlconf/3308.cnf --user=mysql & mysqld --defaults-file=/www/server/mysqlconf/3309.cnf --user=mysql & mysqld --defaults-file=/www/server/mysqlconf/3310.cnf --user=mysql &
登录各个实例,并修改密码
mysql -S /www/server/mysqldata/3307/mysql.sock(或者使用 指定端口号:mysql -h:: -P3307 -uroot -p 【指定端口号的时候必须指定-h参数,要不-P不生效】)mysql> select user,host,authentication_string from mysql.userG;mysql> update mysql.user set authentication_string=password("root") , host='%' where user='root' and host='localhost';mysql> flush privileges;mysql> exit;
下面开始配置1主3从
1.指定3307为主,3308,3309,3310为从
2.关闭所有实例
3.在3307.cnf中添加
server-id = 3307log-bin = mysql-binbinlog_format = MIXED
4.在3308.cnf中添加
server-id = 3308log-bin = mysql-binbinlog_format = MIXED
5.在3309.cnf中添加
server-id = 3309log-bin = mysql-binbinlog_format = MIXED
6.在3310.cnf中添加
server-id = 3310log-bin = mysql-binbinlog_format = MIXED
7.重新启动4个实例
8.在3307连接中新增账号用于同步使用
mysql> show master status;mysql> grant replication slave on *.* to 'db_slave'@'%' identified by 'root';mysql> show master status;
9.主库重置偏移量
mysql> reset master;mysql> show status status; # 此刻查看是空的,无信息
10.从库三节点配置主库同步
mysql> change master to master_host='127.0.0.1',master_port=3307,master_user='db_slave',master_password='root',master_log_file='mysql-bin.000001',master_log_pos=154; # 这里的账号信息是从主库创建的mysql> show slave status G; #此刻查看的是存在信息的,但并没有开启复制【Slave_IO_Running,Slave_SQL_Running 的值为No】mysql> start slave; #启动从节点mysql> show slave status G; #此刻查看的是存在信息的,但并已开启复制【Slave_IO_Running,Slave_SQL_Running 的值为Yes】
至此主从的最精简配置就已经配置好了。可是自己用mysql客户端试一下了。但是还有一些问题会在以下提到。
11.出现主从不一致的情况
mysql> show slave status G; # 查看由于什么原因导致的从节点停止的,之后手动处理好数据mysql> stop slave; # 停止从节点mysql> start slave; # 开启从节点
12.cnf的配置项是为最精简的主从配置,其他的配置请酌情参考进行增加
13.查看从库状态的关键性指标
mysql> show slave status G;
有几个参数比较重要:
master_log_file: slave中的IO线程正在读取的主服务器二进制日志文件的名称
read_master_log_pos: 在当前的主服务器二进制日志中,slave中的IO线程已经读取的位置
relay_log_file: sql线程当前正在读取和执行的中继日志文件的名称
relay_log_pos: 在当前的中继日志中,sql线程已经读取和执行的位置
relay_master_log_file: 由sql线程执行的包含多数近期事件的主服务器二进制日志文件的名称
slave_io_running: IO线程是否被启动并成功地连接到主服务器上
slave_sql_running: sql线程是否被启动
seconds_behind_master: 从属服务器sql线程和从属服务器IO线程之间的事件差距,单位以秒计【这个值比较重要,具体请自行百度】
14.一主多从,从库延迟严重如何调整
MySQL 5.7 的新功能多线程复制
在从库3个实例开启多线程进行复制
mysql> show variables like 'slave_parallel%'; # 默认是datebase,每个线程只能处理一个数据库msyql> stop slave;mysql> set global slave_parallel_type='logical_clock'; #配置成基于逻辑时钟的方式mysql> set global slave_parallel_workers=4; #线程数依据服务的配置和实际情况进行配置mysql> start salve;
15:读写分离+负载均衡中间件
MaxScale 和mycat ,请自行了解