如何在M1芯片的 Linux Centos7 系统安装MySQL8.3.0

mac虚拟机 Linux Centos7 安装MySQL8.3.0

确认系统版本

rpm -qa | grep glibc

image-20240313164116443

下载解压MySQL

MySQL下载地址

image-20240313164206717

[!CAUTION]

根据操作系统的要求下载对应版本放到Linux服务器上面

创建文件夹一会放入我们的压缩包

image-20240313164445596

[!NOTE]

解压gz后缀:gzip -d XXXXXX.tar.xz.gz

image-20240313172443077

[!NOTE]

解压tar.xz后缀:tar -xvf XXXXXX.tar.xz

image-20240313172723099

添加PATH环境变量

vi /etc/profile

[!IMPORTANT]

注意这里我们需要进入MySQL的bin文件中才可以

image-20240313172959311
export PATH=$PATH:/mysql8.3.0/mysql/mysql-8.3.0-linux-glibc2.17-aarch64/bin
image-20240313152639483
#刷新缓存
source /etc/profile

验证环境变量

[!TIP]

进入:根目录"/"然后搜索"my"点击「TAB」按钮两次,是否提示,如果提示则说明环境变量修改成功

image-20240313153602142

创建数据目录

mkdir -p /mysql8.3.0/data
chmod -R 777 /mysql8.3.0/data

image-20240313173230327

创建其他目录

#mysql临时存放文件
mkdir -p /tmp/mysql
#mysql的日志文件
mkdir -p /mysql8.3.0/log
#mysql的pid-file文件夹
mkdir -p /mysql8.3.0/mysqld

配置my.cnf文件

vi /mysql8.3.0/my.cnf

复杂配置[详情]

[mysql]
 # 默认字符集
default-character-set=utf8mb4
[client]
port       = 3306
socket     = /tmp/mysql.sock

[mysqld]
port       = 3306
server-id  = 3306
user       = mysql
socket     = /tmp/mysql.sock
 # 安装目录
basedir    = /opt/soft/mysql8
 # 数据存放目录
datadir    = /opt/soft/mysql8/datas/mysql
log-bin    = /opt/soft/mysql8/datas/mysql/mysql-bin
innodb_data_home_dir      =/opt/soft/mysql8/datas/mysql
innodb_log_group_home_dir =/opt/soft/mysql8/datas/mysql
#日志及进程数据的存放目录
log-error =/opt/soft/mysql8/datas/mysql/mysql.log
pid-file  =/opt/soft/mysql8/datas/mysql/mysql.pid
 # 服务端使用的字符集默认为8比特编码
character-set-server=utf8mb4
lower_case_table_names=1
autocommit =1
 
 ##################以上要修改的########################
skip-external-locking
key_buffer_size = 256M
max_allowed_packet = 1M
table_open_cache = 1024
sort_buffer_size = 4M
net_buffer_length = 8K
read_buffer_size = 4M
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 64M
thread_cache_size = 128
  
#query_cache_size = 128M
tmp_table_size = 128M
explicit_defaults_for_timestamp = true
max_connections = 500
max_connect_errors = 100
open_files_limit = 65535
   
binlog_format=mixed
    
binlog_expire_logs_seconds =864000
    
 # 创建新表时将使用的默认存储引擎
default_storage_engine = InnoDB
innodb_data_file_path = ibdata1:10M:autoextend
innodb_buffer_pool_size = 1024M
innodb_log_file_size = 256M
innodb_log_buffer_size = 8M
innodb_flush_log_at_trx_commit = 1
innodb_lock_wait_timeout = 50
transaction-isolation=READ-COMMITTED
      
[mysqldump]
quick
max_allowed_packet = 16M
       
[myisamchk]
key_buffer_size = 256M
sort_buffer_size = 4M
read_buffer = 2M
write_buffer = 2M
        
[mysqlhotcopy]
interactive-timeout

简单配置[详情]

[!TIP]

可以使用以下的配置

[mysqld]
#Mysql服务的唯一编号 每个mysql服务Id需唯一
server-id=1

#服务端口号 默认3306
port=3306

#mysql安装根目录(default /usr)
basedir=/mysql8.3.0/mysql/mysql-8.3.0-linux-glibc2.17-aarch64

#mysql数据文件所在位置
datadir=/mysql8.3.0/data

#pid「需要手动创建mysqld文件夹」
pid-file=/mysql8.3.0/mysqld/mysqld.pid

#设置socke文件所在目录「需要手动创建mysqld文件夹」
socket=/mysql8.3.0/mysqld/mysql.sock

#设置临时目录「需要手动创建」
tmpdir=/tmp/mysql

# 用户
user=root

# 允许访问的IP网段
bind-address=0.0.0.0

# 跳过密码登录
skip-grant-tables

#主要用于MyISAM存储引擎,如果多台服务器连接一个数据库则建议注释下面内容
#skip-external-locking

#只能用IP地址检查客户端的登录,不用主机名
#skip_name_resolve=1

#事务隔离级别,默认为可重复读,mysql默认可重复读级别(此级别下可能参数很多间隙锁,影响性能)
#transaction_isolation=READ-COMMITTED

#数据库默认字符集,主流字符集支持一些特殊表情符号(特殊表情符占用4个字节)
character-set-server=utf8mb4

#数据库字符集对应一些排序等规则,注意要和character-set-server对应
collation-server=utf8mb4_general_ci

#设置client连接mysql时的字符集,防止乱码
#init_connect='SET NAMES utf8mb4'

#是否对sql语句大小写敏感,1表示不敏感
lower_case_table_names=1

#最大连接数
max_connections=400

#最大错误连接数
max_connect_errors=1000

#TIMESTAMP如果没有显示声明NOT NULL,允许NULL值
explicit_defaults_for_timestamp=true

#SQL数据包发送的大小,如果有BLOB对象建议修改成1G
max_allowed_packet=128M

#MySQL连接闲置超过一定时间后(单位:秒)将会被强行关闭
#MySQL默认的wait_timeout  值为8个小时, interactive_timeout参数需要同时配置才能生效
interactive_timeout=1800
wait_timeout=1800

#内部内存临时表的最大值 ,设置成128M。
#比如大数据量的group by ,order by时可能用到临时表,
#超过了这个值将写入磁盘,系统IO压力增大
tmp_table_size=134217728
max_heap_table_size=134217728

#禁用mysql的缓存查询结果集功能
#后期根据业务情况测试决定是否开启
#大部分情况下关闭下面两项
#query_cache_size = 0
#query_cache_type = 0
 
#数据库错误日志文件「需要手动创建」
log-error=/mysql8.3.0/log/mysqld.log

#慢查询sql日志设置
#slow_query_log=1
#slow_query_log_file=/var/log/mysqld_slow.log

#检查未使用到索引的sql
log_queries_not_using_indexes=1

#针对log_queries_not_using_indexes开启后,记录慢sql的频次、每分钟记录的条数
log_throttle_queries_not_using_indexes=5

#作为从库时生效,从库复制中如何有慢sql也将被记录
log_slow_slave_statements=1

#慢查询执行的秒数,必须达到此值可被记录
long_query_time=8

#检索的行数必须达到此值才可被记为慢查询
min_examined_row_limit=100

#mysql binlog日志文件保存的过期时间,过期后自动删除
#expire_logs_days=5
binlog_expire_logs_seconds=604800

配置解析

[mysqld]
# 设置3306端口
port=3306
# 设置mysql的安装目录
basedir=/usr/local/mysql
# 设置mysql数据库的数据的存放目录
datadir=/usr/local/mysql/data
socket=/usr/local/mysql/data/mysql.sock
# 允许 MyISAM 表的符号链接;8.0.26版本已弃用
symbolic-links=0
# 允许最大连接数
max_connections=1024
#任何给定 MySQL 用户帐户允许的最大同时连接数。值 0(默认值)表示 “没有限制。”
max_user_connections=0
# 允许连接失败的次数。这是为了防止有人从该主机试图攻击数据库系统
max_connect_errors=100
#SELECT语句 的执行超时 ,以毫秒为单位。如果值为 0,则不启用超时
max_execution_time=5000
#如果设置为OFF,MySQL 会中止 SELECT可能需要很长时间才能执行的语句(即,优化器估计检查的行数超过 的值的语句 max_join_size)。WHERE当发布了不明智的声明时,这很有用。新连接的默认值为 ON,它允许所有 SELECT语句。
sql_big_selects=OFF
#查询返回数据行数最大值,超过此值则终止查询默认最大值18446744073709551615
max_join_size=10000
# 服务端使用的字符集默认为UTF8
character-set-server=utf8mb4
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
# 默认使用“mysql_native_password”插件认证
default_authentication_plugin=mysql_native_password
#是否对sql语句大小写敏感,1表示不敏感 注意此参数在8.0版本后必须在初始化数据库之前配置,即初始化后不允许修改此值
lower_case_table_names = 1
#MySQL连接闲置超过一定时间后(单位:秒)将会被强行关闭
#MySQL默认的wait_timeout  值为8个小时, interactive_timeout参数需要同时配置才能生效
interactive_timeout = 1800
wait_timeout = 1800
#Metadata Lock最大时长(秒), 一般用于控制 alter操作的最大时长sine mysql5.6
#执行 DML操作时除了增加innodb事务锁外还增加Metadata Lock,其他alter(DDL)session将阻塞
lock_wait_timeout = 3600
#内部内存临时表的最大值。
#比如大数据量的group by ,order by时可能用到临时表,
#超过了这个值将写入磁盘,系统IO压力增大
tmp_table_size = 64M
max_heap_table_size = 64M
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8mb4
[client]
# 设置mysql客户端连接服务端时默认使用的端口
port=3306
default-character-set=utf8mb4
#mysql socket连接使用 
[client]
port=3306
#配合[mysqld] 下的socket
socket=/usr/local/mysql/data/mysql.sock

初始化MySQL

mysqld --defaults-file=/mysql8.3.0/my.cnf --basedir=/mysql8.3.0/mysql/mysql-8.3.0-linux-glibc2.17-aarch64 --datadir=/mysql8.3.0/data --user=root --initialize-insecure

#  mysqld --defaults-file=「my.cnf文件地址」--basedir=「mySQL安装地址」 --datadir=「数据存放地址」 --user=「用户名称」--initialize-insecure

image-20240313162429852

初始化出现了异常

image-20240313163842898

提示需要的版本没有所以最好一开始下载对应的版本才可以

正常显示

image-20240313175452112

安全模式启动

mysqld_safe --defaults-file=/mysql8.3.0/my.cnf &

image-20240313180910029

是否启动成功

ps -ef | grep mysql

登录MySQL

#跳过密码直接登录,如果出现了异常
mysql -uroot --skip-password

image-20240313201543128

#准确可以看出来异常是默认的套子节地址有问题「/tmp/mysql.sock」,但是我们设置的是「/mysql8.3.0/mysqld/mysql.sock」
mysql -uroot --socket=/mysql8.3.0/mysqld/mysql.sock
image-20240313201725196

修改密码

先查看是否进入了mysql的控制台,查看一下所有的表

show databases;

image-20240313202150140

#直接执行修改root用户的密码为root
alter user root@'localhost' identified by 'root';

修改密码出现了报错

image-20240313202546462

The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement

这时候需要做的是:exit退出

#重启数据库

service mysql restart

image-20240313202713169

这里其实重启失败了,因为我们的数据是通过安装包直接运行的所以有问题,但是不影响主要是后面的权限刷新功能

再次连接数据库,这次不使用跳过密码的连接,并且我们需要刷新权限

image-20240313202813358
#刷新权限
flush privileges;
image-20240313203042268
#修改密码为root
alter user root@'localhost' identified by 'root';

退出测试密码

退出mysql的系统,并且关闭免密登录的功能重启MySQL

image-20240313203239795

关闭MySQL,不建议使用直接杀死,这样会导致数据异常

image-20240313203845820

关闭:跳过密码登录功能

image-20240313204013485

开启程序:mysqld_safe --defaults-file=/mysql8.3.0/my.cnf &

登录程序:mysql -uroot -p --socket=/mysql8.3.0/mysqld/mysql.sock

image-20240313204335440

测试密码

使用**-p**的登录会提示输入密码我们输入我们修改之后的密码:root

查看是否可以正常的登录系统

mysql -uroot -p --socket=/mysql8.3.0/mysqld/mysql.sock
image-20240313203406591

开启远程连接

查看是否开启了远程连接

mysql -uroot -h192.168.215.130 -p

image-20240313204537131

很明显没有开启远程

ERROR 1130 (HY000): Host ‘192.168.215.130’ is not allowed to connect to this MySQL server

开启远程

#将所有用户都修改可以远程访问和root一样权限
update user set user.Host='%' where user.User='root';

异常:

ERROR 1046 (3D000): No database selected

出现这种说明没找到数据库我们需要切换数据库

image-20240313204839538
#切换数据
use mysql

#查询用户状态是否可以远程访问
select user,host from user;
image-20240314165801848

若出现了root的用户当前的host为%的时候则说明我们的上面的修改成功了

防火墙设置

#查看防火墙
firewall-cmd --state
image-20240314170108346
#关闭防火墙
systemctl stop firewalld.service

#放行3306端口
firewall-cmd --zone=public --add-port=3306/tcp --permanent

#开启防火墙
systemctl start firewalld.service

#永久关闭防火墙
systemctl disable firewalld.service

测试连接

image-20240314170249585

[!WARNING]

**注意:**必须关闭服务器的防火墙,或者确保防火墙开启3306的端口

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Geek丶Dream

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值