mac虚拟机 Linux Centos7 安装MySQL8.3.0
确认系统版本
rpm -qa | grep glibc
下载解压MySQL
[!CAUTION]
根据操作系统的要求下载对应版本放到Linux服务器上面
创建文件夹一会放入我们的压缩包
[!NOTE]
解压gz后缀:
gzip -d XXXXXX.tar.xz.gz
[!NOTE]
解压tar.xz后缀:
tar -xvf XXXXXX.tar.xz
添加PATH环境变量
vi /etc/profile
[!IMPORTANT]
注意:
这里我们需要进入MySQL的bin文件中才可以
export PATH=$PATH:/mysql8.3.0/mysql/mysql-8.3.0-linux-glibc2.17-aarch64/bin
#刷新缓存
source /etc/profile
验证环境变量
[!TIP]
进入:
根目录"/"然后搜索"my"点击「TAB」按钮两次,是否提示,如果提示则说明环境变量修改成功
创建数据目录
mkdir -p /mysql8.3.0/data
chmod -R 777 /mysql8.3.0/data
创建其他目录
#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
初始化出现了异常
提示需要的版本没有所以最好一开始下载对应的版本才可以
正常显示
安全模式启动
mysqld_safe --defaults-file=/mysql8.3.0/my.cnf &
是否启动成功
ps -ef | grep mysql
登录MySQL
#跳过密码直接登录,如果出现了异常
mysql -uroot --skip-password
#准确可以看出来异常是默认的套子节地址有问题「/tmp/mysql.sock」,但是我们设置的是「/mysql8.3.0/mysqld/mysql.sock」
mysql -uroot --socket=/mysql8.3.0/mysqld/mysql.sock
修改密码
先查看是否进入了mysql的控制台,查看一下所有的表
show databases;
#直接执行修改root用户的密码为root
alter user root@'localhost' identified by 'root';
修改密码出现了报错
The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement
这时候需要做的是:exit退出
#重启数据库
service mysql restart
这里其实重启失败了,因为我们的数据是通过安装包直接运行的所以有问题,但是不影响主要是后面的权限刷新功能
再次连接数据库,这次不使用跳过密码的连接,并且我们需要刷新权限
#刷新权限
flush privileges;
#修改密码为root
alter user root@'localhost' identified by 'root';
退出测试密码
退出mysql的系统,并且关闭免密登录的功能重启MySQL
关闭MySQL,不建议使用直接杀死,这样会导致数据异常
关闭:跳过密码登录功能
开启程序:mysqld_safe --defaults-file=/mysql8.3.0/my.cnf &
登录程序:mysql -uroot -p --socket=/mysql8.3.0/mysqld/mysql.sock
测试密码
使用**-p**的登录会提示输入密码我们输入我们修改之后的密码:root
查看是否可以正常的登录系统
mysql -uroot -p --socket=/mysql8.3.0/mysqld/mysql.sock
开启远程连接
查看是否开启了远程连接
mysql -uroot -h192.168.215.130 -p
很明显没有开启远程
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
出现这种说明没找到数据库我们需要切换数据库
#切换数据
use mysql
#查询用户状态是否可以远程访问
select user,host from user;
若出现了root的用户当前的host为%的时候则说明我们的上面的修改成功了
防火墙设置
#查看防火墙 firewall-cmd --state
#关闭防火墙 systemctl stop firewalld.service #放行3306端口 firewall-cmd --zone=public --add-port=3306/tcp --permanent #开启防火墙 systemctl start firewalld.service #永久关闭防火墙 systemctl disable firewalld.service
测试连接
[!WARNING]
**注意:**必须关闭服务器的防火墙,或者确保防火墙开启3306的端口