centos7 安装mysql8.0以及主从复制

2022-08-08,,,,

1、系统环境mysql8.0的搭建

1.1Linux系统安装mysql

mysql国内镜像地址:http://mirrors.ustc.edu.cn/mysql-ftp/Downloads/MySQL-8.0
mysql官网地址:https://downloads.mysql.com/archives/community/
或者直接选好的版本下载https://cdn.mysql.com/archives/mysql-8.0/mysql-8.0.19-linux-glibc2.12-x86_64.tar.xz

1、下载安装包或者通过xftp上传

– 登录服务器并跳转到指定目录

cd /usr/local

– 下载或者直接xftp传输

wget https://cdn.mysql.com/archives/mysql-8.0/mysql-8.0.19-linux-glibc2.12-x86_64.tar.xz
2、解压下载的安装包并添加用户

– 解压

tar -xvf mysql-8.0.19-linux-glibc2.12-x86_64.tar.xz

– 移动并改名

mv mysql-8.0.19-linux-glibc2.12-x86_64.tar.xz mysql

– 添加mysql组和用户

groupadd mysql
useradd -r -g mysql mysql
3、配置mysql配置文件与初始化mysql

–给mysql组/usr/local/mysql文件权限

chown -R mysql:mysql /usr/local/mysql

初始化mysql服务

./bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data

这时一定要保存好分配的一个初始密码,后面第一次登录要用到
给root用户mysql文件夹所有权限

chown -R root:root /usr/local/mysql

给mysql 用户data权限

chown -R mysql:mysql /usr/local/mysql/data

–修改/etc/my.cnf配置文件权限
chmod 755 /etc/my.cnf
配置内容

[mysql]
default-character-set=utf8
[client]
port=3306
default-character-set=utf8
socket=/usr/local/mysql/tmp/mysql.sock
[mysqld]
socket=/usr/local/mysql/tmp/mysql.sock
port=3306
default_authentication_plugin=mysql_native_password
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
character-set-server=utf8
default-storage-engine=InnoDb
max_connections=1000
collation-server=utf8_unicode_ci
init_connect='SET NAMES utf8'
innodb_buffer_pool_size=64M
innodb_flush_log_at_trx_commit=1
innodb_lock_wait_timeout=120
innodb_log_buffer_size=4M
innodb_log_file_size=256M
interactive_timeout=120
join_buffer_size=2M
key_buffer_size=32M
log-error=/usr/local/mysql/data/data.err
log_error_verbosity=1
max_allowed_packet=256M
max_heap_table_size=64M
myisam_max_sort_file_size=64G
myisam_sort_buffer_size=32M
read_buffer_size=512kb
read_rnd_buffer_size=4M
log_bin=mysql-bin
server-id=1
skip-external-locking=on
sort_buffer_size=256kb
table_open_cache=256
thread_cache_size=16
tmp_table_size=64M
wait_timeout=2288800
general_log=ON
general_log_file=/usr/local/mysql/data/query_log.pid
slow_query_log=ON
slow_query_log_file=sql-slow.log
long_query_time=1
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

创建mysql.sock 所在的文件夹

mkdir tmp
chmod 777 tmp
4、加入开机自启

–将mysql服务添加到/etc/init.d

cp support-files/mysql.server /etc/init.d/mysql
chmod +x /etc/init.d/mysql

–添加服务

chkconfig --add mysql

–查看是否添加成功

chkconfig --list mysql
5、配置环境变量并开启mysql服务

— 启动mysql服务

service mysql start

— 添加环境变量

vi /etc/profile

profile中填写内容:

export PATH=$PATH:/usr/local/mysql/bin:/usr/local/mysql/lib
6、登录mysql 修改密码

mysql -uroot -p 回车后输入前面的初始密码
– 一定要下修改密码才能进行后续操作

alter user 'root'@'localhost' identified by 'root';

2、mysql用户权限以及安全策略

2.1 创建用户与权限授予

验证插件和密码加密方式的变化在MySQL 8.0中,caching_sha2_password是默认的身份验证插件而不是之前版本的mysql_native_password,默认的密码加密方式
是sha2。
如果需要保持之前的验证方式并保持之前版本的密码加密方式需要在my.cnf配置文件中修改,暂不支持动态修改,需要重启生效:

default_authentication_plugin = mysql_native_password。

将8.0已有的sha2密码修改为sha1的模式:
#修改加密规则为永不过期

ALTER USER 'root'@'localhost' IDENTIFIED BY 'passowrd' PASSWORD EXPIRE NEVER;

#更新一下用户的密码加密方式为之前版本的方式

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

#刷新权限

FLUSH PRIVILEGES; 

MySQL8.0的用户授权和之前有所区别,老版本的常用授权语句在8.0中会报错:
–MySQL8.0之前版本:

GRANT ALL ON *.* TO `root`@`127.0.0.1` IDENTIFIED BY 'passowrd' WITH GRANT OPTION;

–MySQL8.0版本:

use mysql;
select user,host from user;  #查询创建的用户
update user set host='%' where user ='root'; #允许远程机器连接
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'WITH GRANT OPTION; #授权

–创建账号密码

CREATE USER `root`@`127.0.0.1` IDENTIFIED BY 'passowrd';#只允许127.0.0.1本地连接
GRANT ALL ON *.* TO `root`@`127.0.0.1` WITH GRANT OPTION;

–删除权限

REVOKE all privileges ON databasename.tablename FROM 'username'@'host';

–修改密码

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
2.2 用户密码安全策略

要全局建立自动密码到期策略,请使用default_password_lifetime系统变量。其默认值为0,禁用自动密码过期。如果值default_password_lifetime正整数N,则表示
允许的密码生存期,以便密码必须每天更改N。可以加在配置文件中:
1:要建立全局策略,密码的使用期限大约为六个月,请在服务器my.cnf文件中使用以下行启动服务器:
[mysqld]
default_password_lifetime=180
2:要建立全局策略,以便密码永不过期,请将其设置default_password_lifetime为0:
[mysqld]
default_password_lifetime=0
这个参数是可以动态设置并保存的:
SET PERSIST default_password_lifetime = 180;
SET PERSIST default_password_lifetime = 0;
要求每90天更换密码:
CREATE USER ‘root’@‘localhost’ PASSWORD EXPIRE INTERVAL 90 DAY;
ALTER USER ‘root’@‘localhost’ PASSWORD EXPIRE INTERVAL 90 DAY;
禁用密码过期:
CREATE USER ’ wangwei’@‘localhost’ PASSWORD EXPIRE NEVER;
ALTER USER ‘wangwei’@‘localhost’ PASSWORD EXPIRE NEVER;
遵循全局到期政策:
CREATE USER ‘wangwei’@‘localhost’ PASSWORD EXPIRE DEFAULT;
ALTER USER ‘wangwei’@‘localhost’ PASSWORD EXPIRE DEFAULT;
MySQL用户密码重用策略设置
MySQL允许限制重复使用以前的密码。可以根据密码更改次数、已用时间或两者来建立重用限制。帐户的密码历史由过去分配的密码组成。MySQL可以限制从
此历史记录中选择新密码:

  1. 如果根据密码更改次数限制帐户,则无法从指定数量的最新密码中选择新密码。例如,如果密码更改的最小数量设置为3,则新密码不能与任何最近的3个密
    码相同。
  2. 如果帐户因时间的限制而被限制,则无法从历史记录中的新密码中选择新密码,该新密码不会超过指定的天数。例如,如果密码重用间隔设置为60,则新密
    码不得在最近60天内选择的密码之间。
    注意:空密码不记录在密码历史记录中,并随时可以重复使用。
    要全局建立密码重用策略,请使用password_history和password_reuse_interval系统变量。要在服务器启动时指定变量值,请在服务器my.cnf文件中定义它们。
    示例:
    要禁止重复使用最近6个密码或密码超过365天的任何密码,请将这些行放入您的服务器 my.cnf文件中:
    [mysqld]
    password_history=6password_reuse_interval=365
    要动态设置和保存配置,请使用如下所示的语句:
    SET PERSIST password_history = 6;
    SET PERSIST password_reuse_interval = 365;
    2、MySQL8.0的角色管理
    MySQL角色是指定的权限集合。像用户帐户一样,角色可以拥有授予和撤消的权限。可以授予用户帐户角色,授予该帐户与每个角色相关的权限。用户被授予角
    色权限,则该用户拥有该角色的权限。
    以下列表总结了MySQL提供的角色管理功能:
    CREATE ROLE并 DROP ROLE角色创建和删除;
    GRANT并 REVOKE为用户和角色分配和撤销权限;
    SHOW GRANTS 显示用户和角色的权限和角色分配;
    SET DEFAULT ROLE 指定哪些帐户角色默认处于活动状态;
    SET ROLE 更改当前会话中的活动角色。
    CURRENT_ROLE()功能显示当前会话中的活动角色。

3、主从复制概念

3.1主要用途
  1. 读写分离
    在开发工作中,有时候会遇见某个sql 语句需要锁表,导致暂时不能使用读的服务,这样就会影响现有业务,使用主从复制,让主库负责写,从库负责
    读,这样,即使主库出现了锁表的情景,通过读从库也可以保证业务的正常运作。
  2. 数据实时备份,当系统中某个节点发生故障时,可以方便的故障切换
  3. 高可用HA
  4. 架构扩展
    随着系统中业务访问量的增大,如果是单机部署数据库,就会导致I/O访问频率过高。有了主从复制,增加多个数据存储节点,将负载分布在多个从节点
    上,降低单机磁盘I/O访问的频率,提高单个机器的I/O性能。

4、主节点与从节点配置

4.1Master节点配置

MySQL数据库复制操作大致可以分成三个步骤:

  1. 主服务器将数据的改变记录到二进制日志(binary log)中。
  2. 从服务器将主服务器的binary log events 复制到它的中继日志(relay log)中。
  3. 从服务器重做中继日志中的事件,将数据的改变与从服务器保持同步。
    首先,主服务器会记录二进制日志,每个事务更新数据完成之前,主服务器将这些操作的信息记录在二进制日志里面在事件写入二进制日志完成后主服务器通知
    存储引擎提交事务。
    准备: 了解binlog日志,MySQL用户-权限
    mysql服务器配置复制不难,但是因为场景不同可能会存在一定的差异化,总的来说分为一下几步:
  4. 在服务器上创建复制账号。
  5. 通知备库连接到主库并从主库复制数据。
    准备服务器:
角色 IP 操作系统 mysql版本 端口 复制账号 密码
主Master 192.168.83.100 CentOS7.6.1810 8.0.19 3306 slave slave
从slave1 192.168.83.101 CentOS7.6.1810 8.0.19 3306

对于主从复制,在本质上就是通过与从数据库复制与主数据库的binlog日志文件,通过重做实现的同步; 但是一定要注意尽量保证主从服务器上安装了相同的版
本的数据库,设定主从的服务器ip地址为192.168.81.132从服务器的ip地址是192.168.81.140,192.168.81.141。 然后再主服务器上设置一个复制使用的账号,并授予
replication slave权限。我们可以根据ip创建账号为slave
主master创建复制账号并授权,只能通过192.168.83网段使用该账号

CREATE USER 'slave'@'192.168.83.%' IDENTIFIED WITH mysql_native_password BY 'slave';
GRANT REPLICATION SLAVE ON *.* TO 'slave'@'192.168.83.%';
flush privileges;

对于MySQL的主从复制来说最重要的主要就是binlog日志,所以我们就需要开启binlog日志,并设置server-id的值。需要重启服务器之后才生效 二进制日志,也
就是我们常说的binlog。
二进制日志记录了MySQL所有修改数据库的操作,然后以二进制的形式记录日志在日志文件中,其中还包括没调语句所 执行的时间和消耗的资源,以及相关的
事务信息。默认情况下二进制日志功能是没有开启的,启动可以配置log-bin[=file_name]开启,作用就是

  1. 增量备份(不是所有数据备份,而是最近的写操作)
  2. 用于MySQL主从复制
    主要就是下配置文件中添加如下配置
[mysqld]
log-bin=mysql-bin
server-id=1
4.2 Slave节点配置

注意:对于使用虚拟机克隆的的–注意克隆之后的系统你需要稍微修改一下系统的ip 地址
[root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-ens33
IPADDR=192.168.83.101
NETMASK=255.255.255.0
GATEWAY=192.168.823.2
[root@localhost ~]# systemctl restart network

在进行配置之前,回顾一下过程
要先明确配置的架构Master-slave

  1. 配置主节点
    1.1 配置账号
    1.2 开启binlog日志
  2. 配置从节点
    2.1 配置同步日志
    2.2 指定主节点的ip, 端口, 用户…
    2.3 启动从节点
    在配置文件中添加
    配置从节点
server-id = 2
relay_log = /usr/local/mysql/data/mysql-relay-bin
relay_log-index = /usr/local/mysql/data/mysql-relay-bin.index
log_slave_updates = 1
read_only = 1

参数介绍:

  1. server_id:这是服务id系统会自动命名的,但如果机器名边画画肯能回答导致问题。可以讲你主库和备库上的log-bin设置为相同的值。
  2. relay_log:指定 中继日志的位置和命名
    指定主节点的ip,端口,用户
    change master to master_host=‘192.168.83.100’,
    master_port=3306,
    master_user=‘slave’,
    master_password=‘slave’,
    master_log_file=‘mysql-bin.000002’,
    master_log_pos=155;
    参数介绍
    master_host:主master ip地址
    master_port:主master端口
    master_user:复制账号
    master_password:复制密码
    master_log_file:二进制文件,一般先重启主master 生成一个最新的mysql-bin00N文件
    master_log_pos:二进制文件复制点 ,可以在主master上 show master status查看最新的点位
启动从节点
start slave;
查看状态
show slave status \G;
主要看以下信息

Slave_IO_Running: Connecting
Slave_SQL_Running: Yes

tips:克隆过来的系统,导致主从配置失败解决办法:

mysql的server-uuid可能一样会导致主从不成功 ,进入mysql/data/auto.cnf查看是否一样
一样的话
在mysql中生成一个uuid

select uuid();

将生成的uuid复制到从服务器的 mysql/data/auto.cnf中去,然后重启mysql service mysql restart就可以了

本文地址:https://blog.csdn.net/qq_35781798/article/details/107196910

《centos7 安装mysql8.0以及主从复制.doc》

下载本文的Word格式文档,以方便收藏与打印。