Alibaba Cloud Linux 2、Centos7.6 安装 MySQL8.0,主从复制配置

1.删除自带的 mariadb

#查看是否存在mariadb
rpm -qa | grep mariadb
#删除旧版mariadb
rpm -e mariadb-libs --nodeps
#再次检查是否删除
rpm -qa | grep mariadb

2.在线安装MySQL8.0

去官网查看版本:https://dev.mysql.com/downloads/repo/yum/

#配置mysql8.0的安装源
rpm -Uvh https://repo.mysql.com/mysql80-community-release-el7-6.noarch.rpm
#安装mysql8.0服务和客户端根据
yum --enablerepo=mysql80-community install mysql-community-server

3.Mysql一些启动,停用,重启常用命令

# 启动服务
service mysqld start
# 查看MySQL的状态.
service mysqld status
#重启
service mysqld restart

4.查看mysql为root用户生成的临时密码

grep "A temporary password" /var/log/mysqld.log

会得到临时密码
[MY-052111] [Server] A temporary password is generated for root@localhost: SDSE#DF45

SDSE#DF45:作为登录Mysql的密码

5.登录并修改mysql密码

#登录mysql
mysql -u root -p
#输入密码登录,初始化密码(解决ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.)

#修改root密码为asAS123456!
alter user'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'asAS123456!';


#创建一个远程连接用户,这个用户用在Navcate、JDBC登录的时候,直接用root登录不好
create user 'remote'@'%' identified with mysql_native_password by 'asAS123456!';
#为remote用户赋予所有数据库资源的访问权限,熟悉grant的小伙伴可以自己调整
grant all privileges on *.* to remote@'%';

#创建一个Web程序访问用户,这个用户用在Web应用时候,直接用root登录不好
create user 'web_user'@'%' identified with mysql_native_password by 'asAS123456!';
#为web_user用户赋予所有数据库资源的基础权限,熟悉grant的小伙伴可以自己调整
grant select,insert,update,delete on *.* to web_user@'%';
#让刚才的修改生效
FLUSH PRIVILEGES

6.Mysql8.0开放远程访问

#修改my.cnf文件
vi /etc/my.cnf
#my.cnf文本加入
[mysqld]
bind-address = 0.0.0.0
#以上步骤可省略,无需修改bind-address = 0.0.0.0

#创建root用户和设置密码,权限
create user 'root'@'%'  identified with mysql_native_password by '12345678@Aa';
grant all privileges on *.* to 'root'@'%' with grant option;
#刷新权限(不做可能无法生效)
flush privileges;

7. Navicat远程无法创建数据库,问题排查

1.查看是否防火墙开启3306端口,或者直接关闭防火墙

#1、开放端口
firewall-cmd --zone=public --add-port=3306/tcp --permanent   # 开放5672端口
firewall-cmd --zone=public --remove-port=3306/tcp --permanent  #关闭5672端口
firewall-cmd --reload   # 配置立即生效
#2、查看防火墙所有开放的端口
firewall-cmd --zone=public --list-ports
#3.、关闭防火墙,如果要开放的端口太多,嫌麻烦,可以关闭防火墙,安全性自行评估
systemctl stop firewalld.service

8.创建数据库规则推荐

字符集:utf8mb4
排序规则:utf8mb4_unicode_ci

9.设置mysql8.0开机启动

systemctl enable mysqld
systemctl daemon-reload

10.创建表,分表,索引规则

1.建议单表不超过1KW,否则分库分表
2.分表方式
>取模:存储均匀&访问均匀
>按时间:冷热库
3.表必须有主键,建议使用业务主键
4.单表索引数量不要超过5个
5.单个索引字段数不超过5个
6.字符串索引使用前缀索引,前缀长度不超过10个字符
7.VARCHAR按实际分配长度
8.文本字段推荐使用VARCHAR
9.时间字段推荐使用时间戳long
10.Bool字段推荐使用tinyint
11.枚举字段推荐使用tinyint
12.交易金额推荐使用long
13.禁止使用‘%’前导查询
14.禁止使用索引字段进行数学运算,导致索引生效

11.mysql8.0主从复制

2台服务器:
主服务器:192.168.10.100
从服务器:192.168.10.101

(1).主服务器节点配置 vi /etc/my.cnf

[mysqld]
# 数据库文件存储路径
datadir=/var/lib/mysql
# 数据库通信路径
socket=/var/lib/mysql/mysql.sock
# 数据库日志路径
log-error=/var/log/mysqld.log
# 数据库允许进程路径
pid-file=/var/run/mysqld/mysqld.pid

############下面配置主从同步###################
#服务器节点id,一般为服务器ip方便区分
server-id=100
#开启日志文件
log-bin=mysql-bin
# 允许最大连接数
max_connections=5000
# 允许连接失败的次数。这是为了防止有人从该主机试图攻击数据库系统
max_connect_errors=300
# 服务端使用的字符集默认为UTF8
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB

# 默认使用“mysql_native_password”插件认证 此配置必须配置,否则无法同步
default_authentication_plugin=mysql_native_password

[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8

[client]
# 设置mysql客户端连接服务端时默认字符集
default-character-set=utf8

(2).检验service-id是否存在

## 验证查询server_id是否存在 
 show variables like '%server_id%';

(3).查看同步的文件数和行数

# 查询同步的文件和行数,如下查询的数据在从服务器上执行命令会用到。
show master status;  

在这里插入图片描述

(4).从服务器节点 修改my.cnf文件 vi /etc/my.cnf

[mysqld]
# 数据库文件存储路径
datadir=/var/lib/mysql
# 数据库通信路径
socket=/var/lib/mysql/mysql.sock
# 数据库日志路径
log-error=/var/log/mysqld.log
# 数据库允许进程路径
pid-file=/var/run/mysqld/mysqld.pid

############下面配置主从同步###################
#服务器节点id,一般为服务器ip方便区分
server-id=101
#开启日志文件
log-bin=mysql-bin
# 允许最大连接数
max_connections=5000
# 允许连接失败的次数。这是为了防止有人从该主机试图攻击数据库系统
max_connect_errors=300
# 服务端使用的字符集默认为UTF8
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB

# 默认使用“mysql_native_password”插件认证 此配置必须配置,否则无法同步
default_authentication_plugin=mysql_native_password

[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8

[client]
# 设置mysql客户端连接服务端时默认字符集
default-character-set=utf8

(5).从服务器器同步主服务器配置

#从服务器器同步主服务器配置
	## master_log_file='mysql-bin.000011' 表示要同步的日志文件File,
	##是主服务器上述命令‘show master status;'查询出来的值 
	## master_log_pos=12019929 表示要同步日志文件的位置(多少行),详见上图。
change master to master_host='192.168.10.100',master_user='root',master_password='root',master_log_file='mysql-bin.000011',master_log_pos=12019929;
#开启同步
start slave

#检查从服务器复制功能状态
show slave status;

在这里插入图片描述
(6).那么解决Slave_SQL_Running=No的问题

stop slave ;
set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
start slave ;

12.解决连接错误 because of many connection errors; unblock with ‘mysqladmin flush-hosts’"

# 进入mysql 执行一下代码
set global max_connect_errors=1000;

show global variables like '%max_connect_errors%';

13.解决VM克隆导致UUID重复的问题,导致同步失败

vim /var/lib/mysql/auto.cnf

修改server-uuid即可

docker 安装mysql8.0 可以参考 https://blog.csdn.net/Bingxuebojue/article/details/119768748

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值