Mysql的优化(二) Linux中搭建主从

一. 搭建Mysql主从

1.1 Linux中创建两个容器

	创建一个mysq01 给端口33061
	再创建一个mysql02给端口33062

在这里插入图片描述

1.2 两个mysql连接上sqlyog

在这里插入图片描述
连接好后如上所示
在这里插入图片描述

1.3准备两台主机

在这里插入图片描述
这里,我们准备两台机器:

主机:192.168.248.128
从机:192.168.248.139

1.4 开始配置主机

第一步:授权给从机服务器

MySql 8.0以下

GRANT REPLICATION SLAVE ON *.* to 'rep1'@'192.168.248.139' identified by '123';
作用:mysql里面有三个日志,重要的有两个,这个里面用到的叫做binglog,就像Redis中的RDB备份一样,binglog里面会记录下来你所有的操作,然后从机会来到主机里面来读取他的binglog,把binglog拿回去然后自己再重放一下就知道,就可以恢复出来主机的数据了,但是得先认证身份,并不是谁来都可以去进行上面操作必须得是root用户,那么问题来了,我们把root用户给从机去进行验证本身就是错误的行为,怎么去打破这种僵局?
这一句的意思就是,我们先通过这一行命令让从机去创建一个用户,从机等下通过这一行命令从从机登录到主机上面来去读取binglog,这一句是用户创建+授权一步完成,但是mysql8.0之后已经不允许这么写了,我们要创建和授权的步骤要分离开。

几个配置项的含义:
1.*.*表示操作的库,这里指的是主机能操作任何库中的任何表。
2. rep1 表示我从机创建的用户的名字
3. 192.168.248.139 后面紧跟着的表示用户将来得从这个地址进行登录,就跟我们之前提到的Redis中的bind的后面跟着的ip地址是一样的意思,我们下面去把他改成一个%,即让他从任意的地址登录,不去做限制
4. 123 显然,这个是密码

FLUSH PRIVILEGES;
第二行的意思是刷新一下mysql不执行这一行的话我们每次都要去重启mysql

上面两行命令经过更改后如下所示:

GRANT REPLICATION SLAVE ON *.* to 'rep1'@'% ' identified by '123';
FLUSH PRIVILEGES;

MySql 8.0 :

CREATE USER `rep1`@`192.168.248.139` IDENTIFIED WITH caching_sha2_password BY '123';

GRANT Replication Slave ON *.* TO rep1`@`192.168.248.139`;

第二步:
执行前看一下能登录的用户
在这里插入图片描述

执行mysql的代码,创建出了新的用户rep1
在这里插入图片描述

第二步: 修改主库配置文件

开启binlog,并设置server-id ,每次修改配置文件后都要重启Mysql服务才会生效。

在这里插入图片描述

放在你的docker包
进入容器mysql01中的etc下的my.cnf,修改其中的配置

vi /etc/my.cnf

这个配置文件位置也可能是 /etc/mysql/my.cnf ,我这里是5.7的数据库,我是上面一种。

修改的内容如下:

[mysqld]
log-bin=/var/lib/mysql/binlog
server-id=128
binlog-do-db = cmd

如何修改?

这里面没有vi编辑器我们该怎么办?
由于这是容器中的配置,我们没办法用vi编辑器对他机进行修改,而如果安装一个vi编辑器的话会把容器撑大,没有必要,我们还是把那my.cnf里面的关键代码拷贝出来给修改一下然后再把my.cnf这个文件直接替换掉。

原来的my.cnf文件配置

# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/5.7/en/server-configuration-defaults.html
 #修改MySQL的
[mysqld]
#
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M
#
# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin
#
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M
skip-host-cache
skip-name-resolve
datadir=/var/lib/mysql
socket=/var/run/mysqld/mysqld.sock
secure-file-priv=/var/lib/mysql-files
user=mysql

# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

#log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
#修改Mysql客户端的,一般乱码了就是这里出现了问题
[client]
socket=/var/run/mysqld/mysqld.sock

!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mysql.conf.d/

进行我们需要的进行修改之后的配置

# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/5.7/en/server-configuration-defaults.html
 #修改MySQL的
[mysqld]
#
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M
#
# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin
#
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M


log-bin=/var/lib/mysql/binlog
server-id=33061
binlog-do-db = db01



skip-host-cache
skip-name-resolve
datadir=/var/lib/mysql
socket=/var/run/mysqld/mysqld.sock
secure-file-priv=/var/lib/mysql-files
user=mysql

# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

#log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
#修改Mysql客户端的,一般乱码了就是这里出现了问题
[client]
socket=/var/run/mysqld/mysqld.sock

!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mysql.conf.d/

然后用上面配置好的文件把mysql01里面的文件给覆盖
在这里插入图片描述
docker restart mysql01去重启mysql01
重启完成后数据库中输入SHOW MASTER STATUS;

在这里插入图片描述
这样我们就把主机给配置好了。
上图中的几项重要的配置

binlog的名字是:binlog.000001
Position是154
Binlog_Do_DB是我们要去备份的东西

1.5 开始配置从机

从机配置也是配置my.cnf
与上面不同的是把从机端口改一下,然后端口上下两行命令删除即可
在这里插入图片描述

配置完成后复制到mysql02中然后重启,与主机配置类似
在这里插入图片描述

Mysql02对应的从机中写入

#主机地址改成我们自己的地址,比如黄黄这里是1.12.235.192
#主机端口master_port改为33061
#master_log_file和master_log_pos根据主机配好后查询出来的更改
CHANGE MASTER TO MASTER_HOST=‘1.12.235.192’,MASTER_PORT=33061,
MASTER_USER=‘rep1’,MASTER_PASSWORD=‘123’,MASTER_LOG_FILE=‘binlog.000001’,
MASTER_LOG_POS=154;
##启动从机
START SLAVE
#查看从机的状态
SHOW SLAVE STATUS;

在这里插入图片描述

从机主要查看的参数:

在这里插入图片描述

主要看这两个地方没问题就没啥问题了
如果出现了,Connecting ,no 就是你的linux的配置配错或者你的mysql的指令出错了

到此我们的主从就配置好了,下面来看看主从有什么作用和为什么要配置主从吧

二.主从配置实现读写分离

2.1 主机中创建表

在主机33061中先创建数据库db01
在这里插入图片描述
再创建表user
在这里插入图片描述

加入数据
在这里插入图片描述

2.2 从机中读取数据

在从机33062中刷新库
在这里插入图片描述

2.3 为什么不推荐在从机中写入数据

从机中也出现了数据,且,数据是在主机中添加的,可以在从机中读取,实现了读写分离。

注意:从机中也是可以插入数据的,但是并不推荐,因为插入到从机的数据就会造成紊乱

1.从机中插入数据是不会同步到主机上面去的。
2.如果不想去从机中插入数据,可以通过数据库锁来实现。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值