在根据官方文档安装时,过程中仍然存在问题,现在问题解决,记录过程,希望也能帮助其他人。
- 虚拟机映像文件:CentOS7
- MySQL版本:mysql-8.0.20-linux-glibc2.12-x86_64
一.虚拟机网络设置
为了远程连接虚拟机,我们必须获取ip,但是有时候ip被隐藏,无法查看。如下,没有显示ip。
进行如下设置:
1.虚拟机设置中,网络链接设置为NAT模式
2.查看虚拟网络编辑器
(VM17 Pro版本好像才有这个东西),将以下选项勾选,NAT模式有一个虚拟机选择了就可以了。
3.打开虚拟机网络配置器ui界面
在虚拟机中输入命令nmtui。
nmtui
打开后如下
进入Edit a connection,然后选择Edit。
在这个界面中,选择Automatically connect(通过键盘移动到此,单击空格勾选),之后ok,退出ui界面。
4.键入命令ip addr查看ip
成功显示
二.远程连接
我采用FinalShell进行。主机填写刚刚查看到的IP地址。
连接成功后,在/usr/local目录下,上传MySQL压缩包。
三.安装MySQL
1.创建 mysql 用户和组
groupadd mysql
useradd -r -g mysql -s /bin/false mysql
2.解压文件
cd /usr/local
tar xvf mysql-8.0.20-linux-glibc2.12-x86_64.tar.xz
3.创建软连接
ln -s mysql-8.0.20-linux-glibc2.12-x86_64 mysql
4.添加目录变量
export PATH=$PATH:/usr/local/mysql/bin
四.安装后设置
1.为导入和导出操作创建安全目录
cd /usr/local/mysql
mkdir mysql-files
chown mysql:mysql mysql-files
chmod 750 mysql-files
2.配置服务器启动选项
2.1创建MySQL配置文件
cd /etc
touch my.cnf
chown root:root my.cnf
chmod 644 my.cnf
2.2修改配置文件
vi my.cnf
里面内容进行修改
[mysqld]
datadir=/usr/local/mysql/data
socket=/tmp/mysql.sock
port=3306
log-error=/usr/local/mysql/data/localhost.localdomain.err
2.3设置用户选项
确保 服务器以非特权用户帐户身份启动。出于安全原因, 重要的是要避免将服务器作为操作服务器运行 系统用户。mysql
root
user=mysql
2.4允许导入导出操作
secure_file_priv=/usr/local/mysql/mysql-files
2.5避免 LOAD DATA 版本的潜在安全问题
确保禁用local_infile, 默认情况下是这样。LOCAL
local_infile=OFF
完成上述操作,my.cnf中应有如下内容
[mysqld]
datadir=/usr/local/mysql/data
socket=/tmp/mysql.sock
port=3306
log-error=/usr/local/mysql/data/localhost.localdomain.err
user=mysql
secure_file_priv=/usr/local/mysql/mysql-files
local_infile=OFF
3.初始化数据
3.1将位置更改为 MySQL 的顶级目录 安装、创建数据目录并授予所有权 给用户
cd /usr/local/mysql
mkdir data
chmod 750 data
chown mysql:mysql data
3.2初始化数据目录。
cd /usr/local/mysql
bin/mysqld --initialize --user=mysql
如果没有显示日志信息,使用下面命令查看日志信息
cat /usr/local/mysql/data/localhost.localdomain.err
4.启动MySQL服务器
cd /usr/lib/systemd/system
touch mysqld.service
chmod 644 mysqld.service
添加服务信息,将以下配置信息添加到文件中:mysqld.service,vi mysqld.service进入
[Unit]
Description=Mysql Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Service]
User=mysql
Group=mysql
PIDFile=/tmp/mysql.pid
#修改成mysql的启动文件及配置文件路径
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/usr/local/etc/my.cnf
[Install]
WantedBy=multi-user.target
启用服务以执行以下操作 重新启动时自动启动
systemctl enable mysqld.service
运行结果如下
文件重新加载
systemctl daemon-reload
# 重启服务
systemctl restart mysql.service
启动MySQL服务器
systemctl start mysqld
服务器状态查看
systemctl status mysqld
5.更改密码
5.1 登录mysql
cd /usr/local/mysql
bin/mysql -u root -p
5.2 更改密码
进入MySQL内时执行
ALTER USER 'root'@'localhost' IDENTIFIED BY '此处填写修改的密码,单引号别去';
成功执行
输入exit或者ctrl+D。退出Mysql
六.测试
1. 使用 mysqlshow 验证是否可以 从服务器检索信息。
cd /usr/local/mysql
bin/mysqlshow -u root -p
2.使用 mysqladmin 查看 MySQL 服务器 版本信息。
bin/mysqladmin -u root -p version
可添加命令可执行文件路径至系统环境变量
vi ~/.bashrc
export PATH=$PATH:/usr/local/mysql/bin
七.时区更改
首先查看时区,在mysql中执行
show variables like '%time_zone%';
此时时区为CST,并且使用系统时区设置。键入exit退出mysql。一般需将其改为中国时区比较保险:修改/etc/my.cnf。在mysqld组里面加一句:default-time_zone = '+8:00'
vi /etc/my.cnf
重启数据库:mysqld_safe --defaults-file=/usr/local/etc/my.cnf &
然后进入mysql,然后需要填写密码,填写已修改的密码
mysql -u root -p
查看当前时间
select now();
对于修改系统时区设置可以按照以下步骤
-
运行命令
timedatectl list-timezones
来列出可用的时区列表。这会显示出所有支持的时区列表。 -
选择想要设置的时区。将时区设置为"Asia/Shanghai"。
-
运行命令
timedatectl set-timezone Asia/Shanghai
,将系统的时区设置为所选的时区。 -
验证时区设置是否已更改。可以运行
timedatectl
命令来检查系统的当前时区设置。
八.数据库连接
1.关闭防火墙
#关闭防火墙并设置开机不启动
systemctl stop firewalld
systemctl disable firewalld
#关闭SElinux安全模式
setenforce 0
#设置永久关闭selinux
vi /etc/selinux/config
#修改SELINUX:
SELINUX=disabled
#重启生效
reboot
2.远程权限授权
mysql默认权限仅本地,需要进行修改。进入MySQL中执行。将root账户的权限修改为%。
use mysql;
mysql> select user, host from user;
+------------------+-----------+
| user | host |
+------------------+-----------+
| root | localhost |
| mysql.infoschema | localhost |
| mysql.session | localhost |
| mysql.sys | localhost |
+------------------+-----------+
4 rows in set (0.00 sec)
update user set host = '%' where user = 'root' and host='localhost';
mysql> select user, host from user;
+------------------+-----------+
| user | host |
+------------------+-----------+
| root | % |
| mysql.infoschema | localhost |
| mysql.session | localhost |
| mysql.sys | localhost |
+------------------+-----------+
# 授权
GRANT ALL ON *.* TO 'root'@'%';
# 刷权限
flush privileges;
3.数据库连接
我采用DBeaver进行MySQL数据库的连接。左处空白右键创建连接,弹出的页面选择MySQL。服务器地址输入虚拟机ip地址。
九.本地端口映射(八的补充)
这样操作可以让我们不使用虚拟机的ip地址,使用本机ip地址连接数据酷。
首先查看Windows的MySQL服务,需要禁用它,不然会和下面的操作占用3306端口。
Win+R打开命令行界面,输入services.msc,打开‘服务’界面,将MySQL80设置为禁用。
打开虚拟网络编辑器进行如下操作
- 仅需对NAT模式的虚拟机进行操作,点击NAT设置
- 来到页面2,点击添加
- 来到页面3,端口号都填3306,虚拟机IP使用一-4操作中查看到的虚拟机ip。
- 最后就可以用本地ip连接数据库了
十.情况补充
这三天我多次重装mysql,包括但不限于出现以下情况 。
1.mariadb.log文件缺失
创建文件并授予权限即可。
mkdir /var/log/mariadb
touch /var/log/mariadb/mariadb.log
# 用户组及用户
chown -R mysql:mysql /var/log/mariadb/
/usr/local/mysql/support-files/mysql.server start
执行后如下
注:此时可执行3.1.0,可看到自动生成的socket。
2.没有找到mysql.socket文件
显示没有在这个路径下找到socket。
通过命令查找socket在哪里
find / -name mysql.sock
#或者
find / -name *mysql.sock*
2.1如果查询有结果
建立软连接之后,再重新登录mysql
ln -s 查找到的地址 /tmp/mysql.socket
2.2 如果查询没结果
首先查看/etc/my.cnf,这里却显示mysql.sock,我顺着这个路径查看,却发现这个路径下没有这个文件,这代表mysql.sock没有自动生成。(进入脚本后,退出的话,先按 :,再按q,就可退出)
在我多方尝试(大家说的都有道理),虚拟机都试的打不开了,重装!遂解决问题。
vi /etc/my.cnf
3.身份验证有误
进入mysql命令界面,输入如下指令,我的是执行后报错了,但是也能连上了。
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '设置的密码';