华为云鲲鹏arm服务器配置MySQL服务(5.7)及开启ssl链接

华为云鲲鹏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版本降级

  1. 添加mysql用户组和mysql用户,用以隔离mysql进程

    groupadd -r mysql && useradd -r -g mysql -s /sbin/nologin -M mysql
    
  2. 安装依赖库

    yum install -y libaio
    
  3. 下载解压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/ 
    
  4. 配置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
    
  5. 添加环境变量

    vim /etc/profile
    #文件末插入以下两行
    export MYSQL_HOME=/usr/local/mysql
    export PATH=$PATH:$MYSQL_HOME/bin
    source /etc/profile
    
  6. 初始化启动MySQL:无密码初始化登录

    mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
    systemctl start mysqld
    systemctl status mysqld
    
  7. 进入MySQL,设置密码:

    SET PASSWORD = password("rootpwd");
    
  8. 登录验证

    mysql -u root -p
    

由于MySQL5.7默认没有开启SSL,需要手动配置开启

配置MySQL5.7开启SSL

  1. 输入以下内容显示SSL/TLS的状态

    表示当前mysql拥有ssl的功能,但是ssl功能未默认启动

  2. 确认当前的链接状态

    SSL:Not in use也说明当前连接没有使用SSL

  3. 生成SSL/TLS证书和密钥

    使用mysql_ssl_rsa_setup生成相关的请求文件和证书对,用--uid让mysql有权限使用

  4. 找到证书默认存储位置/usr/local/mysql/data

    检查生成的证书:

  5. 在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
posted @ 2020-11-29 22:01  Wardcore  阅读(496)  评论(1编辑  收藏  举报