赞
踩
华为云鲲鹏arm服务器配置MySQL服务(5.7)及开启ssl链接
配置MySQL5.7
首先,我们尝试了部署MySQL8.0,首先是用源码编译安装,编译了两个小时,进度到了约90%左右报了一个错,由于错误提升过于简单,网上搜索找不到解决方案;后来我们又参考鲲鹏centos7上超快速安装mysql8(5分钟搞定)_鲲鹏论坛_华为云论坛 (huaweicloud.com)使用华为源打包好的mysql8的相关rpm包,然而,即使我们使用了
rpm -ivh name.rpm --nodeps --force
忽略依赖问题强制安装,在运行时出现了如下报错信息:
mysql: error while loading shared libraries: libssl.so.
上网查阅资料并检查OpenSSL的版本,我们得出一个结论:鲲鹏的OpenSSL版本是1.0.4,而MySQL依赖的是更高版本的OpenSSL。我们要么编译安装更高版本的openssl,要么退回更低更低版本的MySQL;此外,根据华为云官方的说法,在鲲鹏的centos上能稳定的MySQL是MySQL5.7,考虑服务的稳定性,我们选择了MySQL版本降级
添加mysql用户组和mysql用户,用以隔离mysql进程
groupadd -r mysql && useradd -r -g mysql -s /sbin/nologin -M mysql
安装依赖库
yum install -y libaio
下载解压MySQL
wget https://obs-mirror-ftp4.obs.cn-north-4.myhuaweicloud.com/database/mysql-5.7.27-aarch64.tar.gz
tar xvf mysql-5.7.27-aarch64.tar.gz -C /usr/local/
配置MySQL
mv /usr/local/mysql-5.7.27-aarch64 /usr/local/mysql
mkdir -p /usr/local/mysql/logs
chown -R mysql:mysql /usr/local/mysql
chown -R mysql:mysql /dev/shm
ln -sf /usr/local/mysql/my.cnf /etc/my.cnf
cp -rf /usr/local/mysql/extra/lib* /usr/lib64/
mv /usr/lib64/libstdc++.so.6 /usr/lib64/libstdc++.so.6.old
ln -s /usr/lib64/libstdc++.so.6.0.24 /usr/lib64/libstdc++.so.6
# 设置开机启动
cp -rf /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
chmod +x /etc/init.d/mysqld
systemctl enable mysqld
添加环境变量
vim /etc/profile
#文件末插入以下两行
export MYSQL_HOME=/usr/local/mysql
export PATH=$PATH:$MYSQL_HOME/bin
source /etc/profile
初始化启动MySQL:无密码初始化登录
mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
systemctl start mysqld
systemctl status mysqld
进入MySQL,设置密码:
SET PASSWORD = password("rootpwd");
登录验证
mysql -u root -p
由于MySQL5.7默认没有开启SSL,需要手动配置开启
配置MySQL5.7开启SSL
输入以下内容显示SSL/TLS的状态
表示当前mysql拥有ssl的功能,但是ssl功能未默认启动
确认当前的链接状态
SSL:Not in use也说明当前连接没有使用SSL
生成SSL/TLS证书和密钥
使用mysql_ssl_rsa_setup生成相关的请求文件和证书对,用--uid让mysql有权限使用
找到证书默认存储位置/usr/local/mysql/data
检查生成的证书:
在MySQL服务器上启用SSL连接
MySQL将在服务器启动时在MySQL数据目录中查找相应的证书文件。 因此,我们实际上不需要修改MySQL配置来启用SSL,重启服务即可。
systemctl restart mysql
再次连接MySQL,将自动尝试SSL连接
mysql -u root -p -h 127.0.0.1
检查SSL相关变量的值:
上面显示说明正确启动了SSL功能,再次检查连接详细信息:
此时,我们访问服务器使用了DHE-RSA-AES256-SHA的SSL协议
目前,MySQL服务器配置为接受来自客户端的SSL连接。 但是,如果客户端请求,它仍然允许未加密的连接。
我们可以通过打开require_secure_transport选项来解决这个问题。 这需要所有连接都使用SSL或本地Unix套接字。 由于只能从服务器本身访问Unix套接字,因此对远程用户开放的唯一连接选项将使用SSL。
MySQL创建数据库,并允许远程访问
目标:创建名为“filetransfer“的数据库,新建表user,含有三个字段:id、username、password。
create table `user`(
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
#无符号整形,不许为空,自增以实现全局唯一
`username` varchar(255) COLLATE utf8_bin NOT NULL,
#用户名,可变长字符串,区分大小写,不能为空
#注意utf8每个汉字3字节
`password` varchar(255) COLLATE utf8_bin NOT NULL,
#密码,可变长字符串,区分大小写,不能为空
PRIMARY KEY(`id`) #id为主键
)ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=1;
考虑公文传输系统的使用人数较少,主键id的生成可以不用使用UUID,snowflake等复杂的实现方法。MySQL的id生成策略 - OUYM - 博客园 (cnblogs.com)
执行结果:
向表中插入两条记录测试用
insert into user(username,password) values ('root','pwd');
insert into user(username,password) values ('123','pwd');
使用华为源提供的包安装的MySQL的配置文件中bind-address默认就是0.0.0.0,监听全部接口。
# 授权远程用户登录 %表示任意地址,也可以指定IP,这里我们允许任意地址,在防火墙里设置入站规则解决
grant all privileges on *.* to root@'%' identified by 'your_root_password';
# 重载授权表
flush privileges;
exit;
重启MySQL。
service mysql restart
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。