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 操作演示
- 卸载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
因为一般本地安装需要下载一些相关的包,很容易缺少,而且还有安装顺序的要求,所以一般我们都是使用在线安装的方式安装MySQL的,所以这里我们只演示如何使用在线安装方式安装MySQL。
- 使用在线安装方式安装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
注意:如果需要安装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并测试就好了
启动MySQL
systemctl start mysqld
测试是否启动成功
systemctl status mysqld
- 修改 MySQL 的密码
之后我们设置一下 MySQL 的密码,我这里将密码设置成了 root
执行下面命令设置新密码
mysqladmin -u root -p password
- 如何开启远程访问
在 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=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
因为被克隆的虚拟机中就有mysql,所以链接克隆出来的master和slave中也有 mysql,所以我们无须配置 mysql 的环境,直接进行mysql主从复制架构的搭建。
- 修改 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语句
- 重启 master 和 slave 的 mysql 服务使得配置文件生效
systemctl restart mysqld
- 分别登录 master 和 slave 的mysql服务使用下面指令查看在配置文件中加入的配置是否生效
mysql -u root -p
SHOW VARIABLES like 'server_id';
- 在 master 结点中的 mysql 中执行如下命令查看 master 中日志的相关信息
show master status;
master 中 日志文件的名字是 mysql-bin.000003、我们应该从日志文件的第 120 处 开始同步。
- 在 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;
- 在 slave 的mysql中执行如下命令开启从节点同步
start slave;
- 在 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;
出现如下说明同步成功
- 最后我们使用 Navicat 连接测试就可以了
|