1 准备工作
- 下载mysql组件包,mysql_rpm_.tar.gz 提取码: qdfw
- 把包拷贝到linux目录下,这里使用/home/yk(本机CentOS Linux release 7.9.2009 (Core))
- 解压缩包,tar -xzvf mysql_rpm.tar.gz
- 进入mysql_rpm目录里,cd mysql_rpm
- 执行yum localinstall -y *.rpm
- 如果遇到下面提示,请删除mariadb:
---> Package mariadb-libs.x86_64 1:5.5.68-1.el7 will be obsoleted # 安装过程中遇到的提示
删除方法:
rpm -qa|grep mariadb # 查找
yum remove mariadb-libs # 删除
2 修改mysql的一些配置信息
-
启动服务systemctl start mysqld.service
-
查看初始密码grep ‘temporary password’ /var/log/mysqld.log | awk ‘{print$13}’,最好赋值下
init_password=$(grep 'temporary password' /var/log/mysqld.log | awk '{print$13}')
-
登录并修改密码为Mysql-new
mysqladmin -uroot --password=$init_password password Mysql-new1
-
修改密码策略使之可以设置简单密码
mysql -u root --password=Mysql-new1 -e "set global validate_password.policy=0;set global validate_password.length=1;"
-
修改密码为123456
mysqladmin -uroot --password=Mysql-new1 password 123456
创建数据库并导入数据: mysql -u root --password=密码 -e "create database 数据库名;" mysql -u root --password=密码 数据库名 < mydata.sql
3 指定用户使用ssl连接
选择数据库
mysql> create user 'user'@'%';
创建用户
mysql> grant all on *.* to 'user'@'%';
Query OK, 0 rows affected (0.01 sec)
分配权限
mysql> alter user 'user'@'%' identified by '123456' require ssl;
Query OK, 0 rows affected (0.01 sec)
刷新权限
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
接下来可以测试下,不带-h会以loacalhost登录,且登录不了,因为创建的用户是'user'@'%',想要本地登录还要创建'user'@'localhost'
cd /var/lib/mysql
mysql -uuser -p123456 -h0.0.0.0 --ssl-cert=./client-cert.pem --ssl-key=./client-key.pem
4 gorm使用ssl连接mysql
import (
"crypto/tls"
"crypto/x509"
"time"
dMsql "github.com/go-sql-driver/mysql"
"github.com/pkg/errors"
"gorm.io/driver/mysql"
"gorm.io/gorm"
)
func createTLSConf() tls.Config {
rootCertPool := x509.NewCertPool()
clientCert := make([]tls.Certificate, 0, 1)
# 这个证书可以从mysql服务器的/var/lib/mysql目录下里拷贝出来
certs, err := tls.LoadX509KeyPair("cert/mysql_cert/client-cert.pem", "cert/mysql_cert/client-key.pem")
if err != nil {
logger.Log.Fatal().Err(err).Msg("初始化gorm失败,程序退出")
}
clientCert = append(clientCert, certs)
return tls.Config{
RootCAs: rootCertPool,
Certificates: clientCert,
InsecureSkipVerify: true, // needed for self signed certs
}
}
func InitGorm(dbDSN string, opts ...gorm.Option) (*gorm.DB, error) {
tlsConf := createTLSConf()
err := dMsql.RegisterTLSConfig("custom", &tlsConf)
if err != nil {
logger.Log.Fatal().Err(err).Msg("初始化gorm失败,程序退出")
}
db, err := gorm.Open(mysql.Open(dbDSN), opts...)
if err != nil {
return nil, err
}
rawDb, err := db.DB()
if err != nil {
return nil, err
}
rawDb.SetMaxIdleConns(defaultMaxIDleConnections)
rawDb.SetMaxOpenConns(defaultMaxOpenConnection)
rawDb.SetConnMaxLifetime(defaultMaxLifeTime)
return db, nil
}