> 文档中心 > 在Linux系统中安装MySQL以及搭建MySQL主从复制架构

在Linux系统中安装MySQL以及搭建MySQL主从复制架构


3. 在Linux系统中安装MySQL

3.1 环境准备

# 1.卸载mariadb在安装 MySQL 之前,我们首先需要卸载 mariadb, 因为它会和 MySQL产生冲突。执行命令rpm -qa | grep mariadb 搜索和 mariadb 相关的安装包rpm -qa | grep mariadb之后使用 rpm 指令执行命令rpm -e --nodeps mariadb-libs-5.5.68-1.el7.x86_64,自己执行查询命令出现什么,这里就删除什么,将 mariadb 安装包删除rpm -e --nodeps mariadb-libs-5.5.68-1.el7.x86_64注意:加上 --nodeps 意思是只卸载它,不卸载它的系统依赖 将查询到的mariadb即需要卸载的mariadb卸载 --nodeps 之后删除

3.2 MySQL安装

MySQL的安装方式有两种,一种是本地安装,还有一种是在线安装,两种方式都可以

3.2.1 本地安装(5.6版本默认root没有密码)

# 1.上传下载好的软件包到系统中# 2.执行本地安装包之前必须先安装vimyum install -y vimvim和mysql有一些公共依赖,所以我们先装上vim再装mysql就可以保证一定可以装上# 3.安装步骤进入 mysql-rpm-5.6-centos7 目录cd mysql-rpm-5.6-centos7安装(一定要按照下面的顺序进行安装)rpm -ivh perl-*rpm -ivh net-tools-2.0-0.22.20131004git.el7.x86_64.rpmrpm -ivh mysql-community-common-5.6.42-2.el7.x86_64.rpmrpm -ivh mysql-community-libs-5.6.42-2.el7.x86_64.rpmrpm -ivh mysql-community-client-5.6.42-2.el7.x86_64.rpmrpm -ivh mysql-community-server-5.6.42-2.el7.x86_64.rpm# 4. 启动MySQL并测试systemctl start mysqld测试是否启动成功systemctl status mysqld

3.2.3 在线安装

# 1.编辑mysql-community.repo文件在其中添加官方的yum源添加可以下载MySQL的yum源vi /etc/yum.repos.d/mysql-community.repo在里面添加下载mysql的具体位置# 2.粘贴以下内容到源文件中(在源文件中一定要顶着头)[mysql56-community]    name=MySQL 5.6 Community Server    baseurl=http://repo.mysql.com/yum/mysql-5.6-community/el/7/$basearch/    enabled=1    gpgcheck=0    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql 注意:如果需要安装mysql5.7只需要将baseurl修改即可baseurl=http://repo.mysql.com/yum/mysql-5.7-community/el/7/$basearch/# 3.安装mysqlsudo yum install -y mysql-community-server# 4. 启动MySQL并测试systemctl start mysqld测试是否启动成功systemctl status mysqld

3.3 设置root用户密码

# 1.启动mysql数据库systemctl start mysqld查看是否启动systemctl status mysqld# 2.修改mysql数据库密码mysqladmin -u root -p password 会显示这些    Enter password:     New password:     Confirm new password: 在Enter password处即原始密码处直接按回车(mysql5.6版本默认初始密码为空)  之后输入设置的 New password  再之后再输入一次 New password 确认新密码注意:我们这里装的是5.6的mysql,原始密码为空5.7之前版本安装完成之后没有密码,mysql5.7之后的版本的初始密码是随机生成的,放在了 /var/log/mysqld.log使用命令 grep 'temporary password' /var/log/mysqld.log 读出来即可在设置新密码时一定要复杂一些:比如ROOT!Q2w修改的新密码一定要包含大.小写字母等复杂一点,注意:使用明文登录时如果密码里有!等特殊字符,在登录时一定要加上\转义不使用明文登录的话即使有特殊字符也不需要转移# 3.登录mysqlmysql -u root -p之后显示Enter password: 需要输入密码  或者  明文登录  mysql -uroot -ppassword  其中root和password分别表示mysql的用户名和密码,写自己的mysql用户名和密码

3.4 开启远程访问

# 1.安装完成mysql时,发现mysql数据库,不允许我们远程连接需要修改设置首先我们要关闭远程防火墙systemctl stop firewalld   关闭网络防火墙(暂时关闭,下次Linux重启时会自动开启防火墙)systemctl disable firewalld  关闭开机自启动(永久关闭,注意,先执行第一句,再执行这一句)# 2.登录Linux中的mysql,并选择使用mysql数据库mysql -u root - p 或者明文登录mysql -uroot -prootshow databases;use mysql;# 3.查看mysql库中的所有表show tables;   # 4.查询user表select * from user\G;\G 代表格式化,格式化之后就更有条理了我们只需要查询user表的user,host,password字段即可,执行下面指令查询即可:select user, host, password from user;# 5.执行如下命令grant all privileges on *.* to 'root'@'%' identified by 'root' with grant option;其中 by 后面写自己的密码# 6.刷新权限flush privileges;# 7.重启服务systemctl restart mysqld  这一步可做可不做,因为刷新权限之后设置就生效了# 8.测试连接

3.5 操作演示

  1. 卸载mariadb

执行 rpm -qa | grep mariadb 搜索和 mariadb 相关的包,之后使用 rpm 指令执行 rpm -e --nodeps mariadb-libs-5.5.68-1.el7.x86_64 将 mariadb 相关的包删除(搜出来什么就将什么删除)

rpm -qa | grep mariadbrpm -e --nodeps mariadb-libs-5.5.68-1.el7.x86_64 

在这里插入图片描述

因为一般本地安装需要下载一些相关的包,很容易缺少,而且还有安装顺序的要求,所以一般我们都是使用在线安装的方式安装MySQL的,所以这里我们只演示如何使用在线安装方式安装MySQL。

  1. 使用在线安装方式安装MySQL

首先我们需要编辑mysql-community.repo文件在其中添加官方的yum源

执行下面命令编辑mysql-community.repo文件:

vi /etc/yum.repos.d/mysql-community.repo

在这里插入图片描述

之后将下面的内容粘贴到 mysql-community.repo文件中:

[mysql56-community]name=MySQL 5.6 Community Serverbaseurl=http://repo.mysql.com/yum/mysql-5.6-community/el/7/$basearch/enabled=1gpgcheck=0gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql

在这里插入图片描述

注意:如果需要安装mysql5.7只需要将baseurl修改即可

例如:
baseurl=http://repo.mysql.com/yum/mysql-5.7-community/el/7/$basearch/

MySQL 5.6 版本默认初始root没有密码,而且企业中大部分用的也是 5.6 版本,所以建议大家安装 5.6 版本,方便,这里我安装的也是 5.6 版本的

之后执行下面命令安装MySQL:

sudo yum install -y mysql-community-server

在这里插入图片描述

最后我们启动 MySQL并测试就好了

启动MySQLsystemctl start mysqld测试是否启动成功systemctl status mysqld

在这里插入图片描述

  1. 修改 MySQL 的密码

之后我们设置一下 MySQL 的密码,我这里将密码设置成了 root

执行下面命令设置新密码

mysqladmin -u root -p password 

在这里插入图片描述

  1. 如何开启远程访问

在 Linux 中写MySQL命令肯定比较麻烦了,我们想能不能让我们Navicat连接我们Linux中的MySQL,使用我们的Navicat去操作我们的Navicat呢?这当然是可以的。

首先我们需要关闭防火墙

systemctl stop firewalld   关闭网络防火墙(暂时关闭,下次Linux重启时会自动开启防火墙)systemctl disable firewalld  关闭开机自启动(永久关闭,注意,先执行第一句,再执行这一句)

之后我们要登录MySQL,并使用mysql数据库

mysql -u root -p use mysql;

之后我们要执行下面指令往 user 表中添加一条记录使得远程连接开启

grant all privileges on *.* to 'root'@'%' identified by 'root' with grant option;其中 by 后面写自己Linux中的MySQL的密码

最后执行下面命令刷新权限

flush privileges;

之后我们就可以用Navicat连接Linux中的MySQL了

在这里插入图片描述

Navicat 远程连接

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

4. Linux中MySQL主从复制架构的搭建

在这里插入图片描述

节点对外提供服务,从节点只是完成主节点数据的备份。

master 中的 bin.log 文件并不存储查询语句,从节点并不是真正监听 master 的变化,从节点实际上是去监听 bin.log 的变化,如果 bin.log 变化,从节点会立即读取 bin.log,然后去做数据的同步。

总结:让 master 去开启一个 bin.log,让从节点去同步 master 的 bin.log

注意:主从复制架构只解决了数据的备份


这里补充一些关于虚拟机完整克隆链接克隆小知识

完整克隆是把虚拟机的磁盘彻彻底底的克隆一份,相互互不影响。

还有一种是链接克隆,链接克隆是基于被链接克隆的虚拟机的数据状态克隆出来的快照,链接克隆出来的虚拟机必须依赖于被链接克隆的虚拟机,如果将被链接克隆的虚拟机删除,那么所有链接克隆出来的虚拟机都不能运行。

完整克隆的话所有的机器都是独立的,可以任意删除,无论删哪个,都不会影响其他机器的启动。

链接克隆创建出来的虚拟机创建时间更快,它所占的磁盘空间更小,但是必须依赖被链接克隆的虚拟机(不能删除),如果将被链接克隆的虚拟机删除,那么所有链接克隆出来的虚拟机都不能运行。

在启动链接克隆的时候可以单独启动链接克隆使用,无需启动被链接克隆的虚拟机,只需要保证其不被删除即可。


关于主从架构的步骤如下:

注意:在搭建主从复制架构时master和slave一定要关闭防火墙

# 0.架构规划因为这次我演示的是利用虚拟机搭建MySQL的主从复制架构,因为开多个虚拟机可能会造成计算机卡顿,所以在这里搭建主从复制架构对于maste来说我只搭建了一个slave,实际上一个master是可以有多个slave的,slave也是可以有它自己的从节点的。  master  主节点  slave   从节点# 1.修改mysql的配置文件使得开启日志(master和slave都要执行)首先我们需要在master中配置日志,但是有可能slave还有它自己的从节点(虽然我这次并没有这样做),所以为了让从节点也有它自己的从节点所以我们也需要配置slave的日志。配置日志的目的是为了日后客户端操作master时把这些操作的sql语句记录到日志中,默认这个日志是不开启的,所以我们需要配置开启日志。  vim /etc/my.cnf  在配置文件中加入配置(master和slave都要执行)将下面这些配置直接放在配置文件中[mysqld]的下面(顶着最前面写)其中 server-id 是架构架构节点的唯一标识,不允许有重复log-bin 是给日志文件起一个确定的前缀,其中 log-slave-updates 代表日志有变化时,从节点自动更新slave-skip-errors=all代表让从节点跳过所有主节点执行过程中日志中错误的sql语句,错误的语句master肯定不会执行,slave没必要执行错误的sql语句其中master加入的配置:server-id=1log-bin=mysql-binlog-slave-updatesslave-skip-errors=all其实在这里从节点加不加日志配置都可以,但是为了让从节点也有它自己的从节点,我们也应该在从节点中加上日志配置,从节点有它自己的从节点,这样无限循环下去,就是一个经典的架构,叫做: “菊花链”slave加入的配置:server-id=2    log-bin=mysql-binlog-slave-updatesslave-skip-errors=all   注意:两个机器的server-id不能一致# 2.重启mysql服务使配置文件生效(master和slave都要重启mysql服务)systemctl restart mysqld# 3.查看当前MySQL服务在架构中的唯一标识去检测配置是否生效(master和slave都要执行)mysql -u root -pSHOW VARIABLES like 'server_id';  上面这条命令是显示这个结点在架构节点的唯一标识# 4.登录master节点执行如下命令查看master日志的相关信息日志文件是一个二进制文件,在安装mysql的时候安装信息也会写入到日志文件中,而我们同步的时候只需要同步sql语句即可,不需要同步 安装信息,所以我们要执行上面命令找到我们应该从第几行开始同步  执行 show master status 命令显示生成的日志文件的详细名字,以及这个日志文件我们应该从什么位置开始同步日志文件的名字是mysql-bin.000001,日志显示同步的时候要从日志文件的 120 行开始,120行以前的都是一些安装的或者系统级的配置,接下来的操作会在120行之后追加show master status;# 5.登录从节点执行如下命令去设置它应该去同步哪个master的哪个日志: 告诉从节点它的主节点是谁,下面中写maste的ip、user、password、master中日志文件名字以及从节点从      主节点的日志文件中的哪个位置开始同步(因为主节点中关于安装mysql的日志我们没必要同步)change master to master_host='192.168.72.132',master_user='root',master_password='root',master_log_file='mysql-bin.000003',master_log_pos=120;# 6.开启从节点(在从节点执行)在从节点的sql中执行如下命令开启从节点start slave; 日后如果关闭的话可以执行如下命令停止同步:stop  slave;# 7.查看从节点状态(在从节点执行)在从节点的sql中执行如下命令看一看从节点状态show slave status\G;    注意:    1.出现 Slave_IO_Running: Yes 和 Slave_SQL_Running: Yes 说明成功,    2.如果在搭建过程出现错误,可以查看查看错误日志文件 cat /var/log/mysqld.log 注意:如果出现Slave I/O: Fatal error: The slave I/O thread stops because master and  slave have equal MySQL server UUIDs; these UUIDs must be different for replication to  work. Error_code: 1593错误,请执行如下命令,rm -rf /var/lib/mysql/auto.cnf删除这个文件,之所 以出现会出现这样的问题,是因为我的从库主机是克隆的主库所在的主机,所以auto.cnf文件中保存的UUID会 出现重复。    maste和slave有相同的mysql服务的UUID,这些UUID必须不同才能正常工作,为什么maste和slave有相同的mysql服务的UUID呢?是因为maste和slave都是克隆过来的,复制过来的它里面有一个文件 /var/lib/mysql/auto.cnf ,maste 和 slave 都有这个文件,我们要在 maste 和 slave 都执行 rm -rf /var/lib/mysql/auto.cnf  把这个文件给删除    注意:删除这个文件的时候先关闭 mysql 再删除这个文件    systemctl stop mysqld;    rm -rf /var/lib/mysql/auto.cnf     systemctl start mysqld;    之后再从节点的sql中执行下面指令开启就好了:    start slave;# 8.通过客户端工具进行测试# 9.关闭主从复制(在从节点执行)stop slave;

接下来我们来具体操作一下如何实现:

这里我使用了链接克隆的方式克隆了两个虚拟机,一个是master、一个是slave

在这里插入图片描述

因为被克隆的虚拟机中就有mysql,所以链接克隆出来的master和slave中也有 mysql,所以我们无须配置 mysql 的环境,直接进行mysql主从复制架构的搭建。

  1. 修改 master 和 slave 配置文件使得日志开启

修改日志:

vim /etc/my.cnf

在 master 的配置文件中的 [mysqld] 面加入如下配置:

server-id=1log-bin=mysql-binlog-slave-updatesslave-skip-errors=all

在 slave 的配置文件中的 [mysql]]下面加入如下配置:

server-id=2log-bin=mysql-binlog-slave-updatesslave-skip-errors=all

这里我们解释一下加入的配置的含义:

  • 其中 server-id 是架构架构节点的唯一标识,不允许有重复
  • log-bin 是给日志文件起一个确定的前缀,
  • 其中 log-slave-updates 代表日志有变化时,从节点自动更新
  • slave-skip-errors=all代表让从节点跳过所有主节点执行过程中日志中错误的sql语句,错误的语句master
    肯定不会执行,slave没必要执行错误的sql语句

在这里插入图片描述

在这里插入图片描述

  1. 重启 master 和 slave 的 mysql 服务使得配置文件生效
systemctl restart mysqld
  1. 分别登录 master 和 slave 的mysql服务使用下面指令查看在配置文件中加入的配置是否生效
mysql -u root -pSHOW VARIABLES like 'server_id';

在这里插入图片描述

在这里插入图片描述

  1. 在 master 结点中的 mysql 中执行如下命令查看 master 中日志的相关信息
show master status;

在这里插入图片描述

master 中 日志文件的名字是 mysql-bin.000003、我们应该从日志文件的第 120 处 开始同步。

  1. 在 slave 结点的mysql中执行下面命令去设置它应该去同步哪个master、root、password等

我们在 slave 中 执行下面语句时应该写上 master 的 ip,用户名、密码、master中日志文件的名字、应该从日志文件的哪个位置开始同步。

change master to master_host='192.168.72.132',master_user='root',master_password='root',master_log_file='mysql-bin.000003',master_log_pos=120;
  1. 在 slave 的mysql中执行如下命令开启从节点同步
start slave; 
  1. 在 slave 的mysql中执行下面命令查看 slave 是否开启同步成功
show slave status\G;

因为我的 master 和 slave 都是克隆过来的,所以它们的 mysql 服务的 UUID 是相同的,会出现下面错误

在这里插入图片描述

对于此,只需要在 master 的 mysql 和 slave 的 mysql 中分别执行如下命令删除一个文件就可以了:

注意:删除这个文件的时候先关闭 mysql 再删除这个文件systemctl stop mysqld;rm -rf /var/lib/mysql/auto.cnf 

之后我们再重启两个节点的mysql服务,在 slave 中重新开启同步之后执行 show slave status\G; 查看是否成功

systemctl start mysqld;mysql -u root -pshow slave status\G;

出现如下说明同步成功

在这里插入图片描述

  1. 最后我们使用 Navicat 连接测试就可以了

在这里插入图片描述