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.执行本地安装包之前必须先安装vim
	yum install -y vim
	vim和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.rpm
	rpm -ivh mysql-community-common-5.6.42-2.el7.x86_64.rpm
	rpm -ivh mysql-community-libs-5.6.42-2.el7.x86_64.rpm
	rpm -ivh mysql-community-client-5.6.42-2.el7.x86_64.rpm
	rpm -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.安装mysql
	sudo 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.登录mysql

	mysql -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 -proot
	show 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 mariadb
rpm -e --nodeps mariadb-libs-5.5.68-1.el7.x86_64 

Linux系统中安装MySQL以及搭建MySQL主从复制架构_第1张图片

因为一般本地安装需要下载一些相关的包,很容易缺少,而且还有安装顺序的要求,所以一般我们都是使用在线安装的方式安装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 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

Linux系统中安装MySQL以及搭建MySQL主从复制架构_第2张图片

注意:如果需要安装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

Linux系统中安装MySQL以及搭建MySQL主从复制架构_第3张图片

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

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

Linux系统中安装MySQL以及搭建MySQL主从复制架构_第4张图片

  1. 修改 MySQL 的密码

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

执行下面命令设置新密码

mysqladmin -u root -p password 

Linux系统中安装MySQL以及搭建MySQL主从复制架构_第5张图片

  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了

Linux系统中安装MySQL以及搭建MySQL主从复制架构_第6张图片

Navicat 远程连接

Linux系统中安装MySQL以及搭建MySQL主从复制架构_第7张图片

Linux系统中安装MySQL以及搭建MySQL主从复制架构_第8张图片

Linux系统中安装MySQL以及搭建MySQL主从复制架构_第9张图片

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

Linux系统中安装MySQL以及搭建MySQL主从复制架构_第10张图片

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

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=1
		log-bin=mysql-bin
		log-slave-updates
		slave-skip-errors=all

	其实在这里从节点加不加日志配置都可以,但是为了让从节点也有它自己的从节点,
	我们也应该在从节点中加上日志配置,从节点有它自己的从节点,这样无限循环下去,
	就是一个经典的架构,叫做: “菊花链”

	slave加入的配置:

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

   注意:两个机器的server-id不能一致

# 2.重启mysql服务使配置文件生效(master和slave都要重启mysql服务)

	systemctl restart mysqld

# 3.查看当前MySQL服务在架构中的唯一标识去检测配置是否生效(master和slave都要执行)

	mysql -u root -p

	SHOW 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

Linux系统中安装MySQL以及搭建MySQL主从复制架构_第11张图片

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

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

修改日志:

vim /etc/my.cnf

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

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

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

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

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

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

Linux系统中安装MySQL以及搭建MySQL主从复制架构_第12张图片

Linux系统中安装MySQL以及搭建MySQL主从复制架构_第13张图片

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

Linux系统中安装MySQL以及搭建MySQL主从复制架构_第14张图片

Linux系统中安装MySQL以及搭建MySQL主从复制架构_第15张图片

  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 -p
show slave status\G;

出现如下说明同步成功

Linux系统中安装MySQL以及搭建MySQL主从复制架构_第16张图片

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

Linux系统中安装MySQL以及搭建MySQL主从复制架构_第17张图片

你可能感兴趣的:(Linux,后端,数据库,linux,mysql,服务器)