如何在Linux系统中配置MySQL并且搭建MySQL的主从

建议先从第四点看起,很多问题可以迎刃而解。

目录

一  配置MYSQL

二  搭建mysql的主从关系

三 限制从进行增删改

四 开端口


一  配置MYSQL


对于配置MySQL,我总结为下面几点:

  1. 在本地先写好mysql的配置
  2. 利用docker拉取网络上的MySQL镜像
  3. 构建docker容器,使拉取的镜像与本地的配置形成映射

分点来讲

  在本地写好mysql需要的配置,首先需要在/usr/local (一般的本地文件放置的地方)下面创建software文件夹,并在里面创建一个mysql文件夹,然后在mysql文件夹中创建3306文件夹,然后在里面分别创建data文件夹还有conf文件夹。具体的结构如图所示。

7757855ca98a47b0a8e06289bf843272.png

 然后在conf中创建一个my.cnf文件,然后就可以在里面写mysql相关的配置了。

pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
datadir         = /var/lib/mysql
secure-file-priv= NULL
default_authentication_plugin=mysql_native_password

# Custom config should go here
!includedir /etc/mysql/conf.d/

server_id=200
log_bin=mysql-bin
binlog_format=row

其中重要的是server_id,他是MySQL 中用来标识不同服务器(实例)的一个唯一标识符。在 MySQL 主从复制和多主复制等场景中,这个属性非常重要。

配置 log_bin=mysql-bin 启用了 MySQL 的二进制日志功能,并将生成的日志文件前缀设置为 "mysql-bin",而 binlog_format=row 则指定了二进制日志记录的格式为 "row",以保证在主从复制中数据的精确复制和一致性。

本地配置好了就可以在网络上拉取MySQL的镜像了(如果延迟很高的话,可以去查找替换阿里云等镜像的方法或者使用魔法也可以)

拉取的代码如下

docker pull mysql

如果需要拉取指定版本,则只需要在mysql后面加上:并附上指定版本即可。

最后就是构建docker容器来运行mysql了,这一步也很简单。代码如下

docker run -it \
--name mysql_3306 \
--privileged \
-p 3306:3306 \
-v /usr/local/software/mysql/3306/conf/my.cnf:/etc/mysql/my.cnf \
-v /usr/local/software/mysql/3306/data:/var/lib/mysql \
-v /usr/local/software/mysql/3306/mysql-files:/var/lib/mysql-files \
-e MYSQL_ROOT_PASSWORD=123 \
-d mysql

简单解释下,docker run 是用来创建和启动一个新容器的代码,-it是可以让你进入容器的交互式终端,从而可以直接在容器内执行命令和操作。这在需要手动进入容器内部进行一些配置、调试、或者查看容器中的日志等情况下非常有用。

--name 是这个容器的名字,注意name必须是唯一的,不能重复。

--privileged 设置容器公开权限(默认为true)

-p 端口号 具体是指将前面的宿主机的端口号映射到后面的docker容器内部的mysql的端口号,可以通过宿主机的 3306 端口与运行在 Docker 容器中的MySQL数据库进行交互,实现在宿主机上访问MySQL服务的目的

 -v  linux挂载文件夹/文件和容器内路径的映射 注意这里的映射路径得跟我们第一步的本地配置文件的路径对的上

-e 环境变量 这里可以用来设置docker容器中的mysql 的账号密码

-d 指后台运行容器,可以避免对接下来的操作造成影响。

到这一步结束,就已经成功地配置了MySQL。

docker exec -it mysql_3306 bash

 使用上面的指令,进入容器内,然后输入mysql -uroot -p123来检验MySQL是否成功安装

二  搭建mysql的主从关系

    通过上面的步骤已经成功配置了一个MySQL了,但是实际生产过程中,面对了大量数据的问题,如果不做优化的话,MySQL既得做增删改,又得做查询工作,这样性能会严重下降,所以通过搭建MySQL的主从关系,将一部分的查询任务交给容器中的其他MySQL来完成,很大程度上提高了性能、可用性和灵活性。下面将会详细阐述如何搭建MySQL的主从关系。

首先,我们需要进入mysql容器,输入命令: show variables LIKE 'log_%',来检查binlog是否开启。

b06919e7c2c547848ddcd8879a1edcd3.png

binlog 是主服务器上记录所有数据更改操作的日志,而 relaylog 是从服务器上记录接收自主服务器的数据更改操作的日志。这两种日志的正确运行和同步,确保了主从复制的正确性、可靠性和一致性,是主从复制机制的基础。

保证了log_bin开启之后,我们开始搭建mysql的master服务器

这里基本的配置,之前已经做好了,这里我们可以将之前创建的mysql容器直接当作主服务器,我们先获取他的一些基本信息

docker inspect mysql_3306 |grep IPA

这个指令可以获取主服务器的容器内ip,之后配置从服务器会用到。

接着我们进入容器

docker exec -it mysql_3306 bash

在容器中输入

mysql -uroot -p123

进入MySQL服务,然后我们先创建一个用户来与从(slave)服务通信(并且给他一定的权限,保证日志文件能安全地发送到从服务器)

create user ‘slave’@’%’ identified by ‘123’;
GRANT REPLICATION SLAVE,REPLICATION CLIENT ON . TO ‘slave’@’%’;
ALTER USER ‘slave’@’%’ IDENTIFIED WITH mysql_native_password BY ‘123’;
flush privileges;

执行上面的指令后,就可以创建一个名为slave,密码为123的用户,并且给他一定的权限,最后刷新权限。

在这之后,我们还需要在mysql的操作界面输入

show master status;

来查看主服务器的状态

c17f1922888642fcb66184e8d1bc197d.png

file是指二进制日志文件的起始文件名,Position是指起始文件位置,后面我们配置从服务器的时候,需要用到Position来保证主从同步的准确性。

主服务器配置完,我们进行从服务器的配置。

跟之前的mysql配置一样,只需要修改my.cnf文件中中的一点内容即可

pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
datadir         = /var/lib/mysql
secure-file-priv= NULL
default_authentication_plugin=mysql_native_password

# Custom config should go here
!includedir /etc/mysql/conf.d/

server_id=210
log_bin=mysql-slave01-bin
relay_log=wnhz-relay-bin
read_only=1

这里的server_id之前说过了,不能够重复,所以这里改成210,加上了relay_log,用来记录从主服务器上获取的二进制日志。另外read_only=1规定了从服务器的只读操作,避免了意外的修改。

跟之前一样创建了mysql的容器之后(注意端口号不要一样,之前用的3306,这里可以用3310或者其他的)最重要的一步:

进入从服务器的容器后,进入mysql服务,输入以下指令

change master to
master_host='172.17.0.2',
master_user='slave',
master_password='123',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=1404;

这里的172.17.0.2就是之前配置主服务器时查询出来的ip,master_user就是创建的那个通信对象,

 MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=1404;

一定要跟主服务器中show master status查询出来的内容一模一样!(可能会发生变化,所以需要重新按照之前的方式查询一次)

指令运行完,主从关系已经绑定,接下来要开启slave

start slave;

开启完成之后,继续输入

show slave status \G;

来查询主从状态

41c94a0608ee43a495d38babfe0fa93d.png

一定得是两个Yes才算搭建完成。

至此,mysql 的主从已经搭建完毕,通过测试,已经实现了主从的功能。

f68e5eceaa61400bb063a63024a4cc17.png

若配置完还是无法实现主从同步关系。可以尝试以下的指令:

stop slave;
reset slave;
start slave;

三 限制从进行增删改

进入从容器中的mysql服务里,创建对应的对象,只给读权限

create user 'rdb'@'%' identified WITH mysql_native_password by '123';
 grant select ON *.* to 'rdb'@'%';
 flush privileges;

四 开端口

此外,每一个容器都要在机器上开通对应的端口如3306,3310等。

指令如下:

firewall-cmd —zone=public —add-port=端口号/tcp —permanent

以上就是MySQL的配置以及搭建主从的大致过程,欢迎有疑问的小伙伴在评论区留言,也欢迎各位大佬指正。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值