MySQL复制环境搭建
本文通过 yum 方式部署 Mysql 数据库的复制环境,其他方式参考【MySQL环境部署(5.7+8.0)(Win+Linux)】。
1 环境准备
根据一主一从或多从准备服务器数量。
每台虚拟机上需要安装好 MySQL ,主从数据库版本一致。
| 主机名 | IP | OS | mysql version |
|---|---|---|---|
| mysql80-master | 192.168.2.80 | Centos 7.8 | Mysql 8.0.31 |
| mysql80-slave01 | 192.168.2.81 | Centos 7.8 | Mysql 8.0.31 |
| mysql80-slave02 | 192.168.2.82 | Centos 7.8 | Mysql 8.0.31 |
说明:前面讲过如何克隆一台CentOS。可以在一台CentOS上安装好MySQL,进而通过克隆的方式复制出1台包含MySQL的虚拟机。
注意:克隆的方式需要修改新克隆出来主机的:1.
MAC地址2.hostname3.IP 地址4.UUID。
此外,克隆的方式生成的虚拟机 ( 包含 MySQL Server ),则克隆的虚拟机 MySQL Server 的 UUID 相同,必须修改,否则在有些场景会报错。比如报如下的错误:
mysql> show slave status\G
Last_IO_Error: 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.
修改 MySQL Server 的 UUID 方式:
vim /var/lib/mysql/auto.cnf
systemctl restart mysqld
2. Mysql8.0安装
2.2.1 获取rpm包
通过yum在线安装。
根据 https://dev.mysql.com/downloads/repo/yum 获取最新rpm包。

# 下载安装MySQL的rpm包,截止目前rpm版本是el7-7
wget https://dev.mysql.com/get/mysql80-community-release-el7-7.noarch.rpm
yum -y localinstall mysql80-community-release-el7-7.noarch.rpm
2.2.2 安装配置MySQL Server
在服务器三个节点安装 mysql server。
2.2.1 安装数据库
yum install -y mysql-community-server
2.2.2 初始化数据库
# 初始化密码
[root@mysql80-01 ~]# mysqld --initialize --user=mysql
[root@mysql80-01 ~]# cat /var/log/mysqld.log
2022-10-08T15:29:20.937483Z 0 [System] [MY-013169] [Server] /usr/sbin/mysqld (mysqld 8.0.30) initializing of server in progress as process 55360
2022-10-08T15:29:20.966525Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
2022-10-08T15:29:21.362763Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
2022-10-08T15:29:23.216780Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: #uv._rfYp4T4
#首次登录,启动服务,登录输入临时密码
[root@mysql80-01 ~]# systemctl start mysqld
[root@mysql80-01 ~]# mysql -uroot -p
#修改密码
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'root';
Query OK, 0 rows affected (0.01 sec)
2.2.3 远程登陆
# 如果不设置远程登录,管理服务器登录节点会报错
Shell.connect: Host '192.168.2.80' is not allowed to connect to this MySQL server (MySQL Error 1130)
#允许远程登陆
use mysql;
select Host,User from user;
update user set host = '%' where user ='root';
flush privileges;
#`%`是个 通配符 ,如果Host=192.168.1.%,那么就表示只要是IP地址前缀为“192.168.1.”的客户端都可以连接。
# 如果`Host=%`,表示所有IP都有连接权限。生产禁用。
2.2.4 兼容老版本验证
当用老版本 mysql 的客户端连接 mysql 8 服务器时,可能报以下错误:
ERROR 2059 (HY000): Authentication plugin 'caching_sha2_password' cannot be loaded: /home/mysql/mysql-5.6.14/lib/plugin/caching_sha2_password.so: cannot open shared object file: No such file or directory
可以使用两个方法解决此问题。
- 第一种方法是在配置文件中设置
default_authentication_plugin='mysql_native_password',然后重启mysql服务器使之生效。default_authentication_plugin是只读系统变量,不能动态修改。 - 第二种方法是在创建用户时,使用兼容新老版本的认证方式,例如:
create user 'slave'@'%' identified with mysql_native_password by 'slave';
flush privileges;
通过以下查询可以得到用户所对应的认证插件:
mysql> select host,user,plugin from mysql.user;
+-----------+------------------+-----------------------+
| host | user | plugin |
+-----------+------------------+-----------------------+
| % | slave | mysql_native_password |
| localhost | mysql.infoschema | caching_sha2_password |
| localhost | mysql.session | caching_sha2_password |
| localhost | mysql.sys | caching_sha2_password |
| localhost | root | caching_sha2_password |
+-----------+------------------+-----------------------+
5 rows in set (0.00 sec)
3 防火墙
# 1、各节点关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
# 2、或放行端口
# 查看开放的端口号
firewall-cmd --list-all
# 设置开放的端口号
firewall-cmd --add-service=http --permanent
firewall-cmd --add-port=3306/tcp --permanent
# 重启防火墙
firewall-cmd --reload
4. 禁用Selinux
#所有主机禁用Selinux
[root@mysql80-master ~]# cat /etc/sysconfig/selinux
SELINUX=disabled
5. Hosts
#所有主机添加hosts解析
[root@mysql80-master ~]# cat /etc/hosts
....
192.168.2.80 mysql80-master
192.168.2.81 mysql80-slave01
192.168.2.82 mysql80-slave01
扫码关注公众号,获取最新发布

浙公网安备 33010602011771号