目录结构
- 前言
- 查看是否已安装mariadb,若是已安装,需要卸载
- 下载MySql源码包并解压
- 安装编译所需要的工具和库
- 创建mysql的安装目录及数据库存放目录
- 进到mysql-5.7.29源码目录,编译安装
- 创建本地连接套接字文件
- 设置自定义配置文件
- 初始化数据库
- 拷贝启动脚本、启动服务、登录数据库(没有密码)
- 启动配置密码和允许远程访问
- 自定义启动方式(加载自定义配置文件)
- 参考连接
前言
java程序国产服务器适配,配置mysql环境;
服务器:Linux uos123-PC 4.19.0-loongson-3-desktop #5322 SMP Mon Oct 10 14:21:36 CST 2022 mips64 GNU/Linux
查看是否已安装mariadb,若是已安装,需要卸载
# 检测是否存在mariadb
rpm -qa|grep mariadb
# 存在则卸载(小编未检测到mariadb,以下命令未验证)
# 如果无法删除可以 执行yum remove 具体的包名
yum remove mariadb
下载MySql源码包并解压
小编此处是命令行卸载,如无wget环境,也可到官网下载不同版本源码包,然后上传指定目录进行解压
# 下载mysql-5.7.29.tar.gz源码包
wget https://cdn.mysql.com/archives/mysql-5.7/mysql-5.7.29.tar.gz
# 解压源码包
tar -zxvf mysql-5.7.29.tar.gz
安装编译所需要的工具和库
# 安装编译所需要的工具和库
apt-get install make cmake gcc g++ bison libncurses5-dev build-essential
创建mysql的安装目录及数据库存放目录
# 创建mysql安装目录
mkdir -p /usr/local/mysql
# 创建mysql数据存放目录
mkdir -p /usr/local/mysql/data
# 创建mysql组
groupadd mysql
# 创建Mysql用户,同时属于mysql组
useradd -g mysql mysql
# 设置目录权限
chown -R root:mysql /usr/local/mysql
chown -R mysql:mysql /usr/local/mysql/data
进到mysql-5.7.29源码目录,编译安装
make和makeinstall,编译安装过程需很长一段时间,确保此过程电脑一直待机,耐心等待!
# 预编译
cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql
-DMYSQL_DATADIR=/usr/local/mysql/data
-DSYSCONFDIR=/etc
-DDOWNLOAD_BOOST=1
-DWITH_BOOST=/root/mysql-5.7.24/include/boost_1_59_0
-DWITHOUT_PARTITION_STORAGE_ENGINE=0
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_EXTRA_CHARSETS=all \
# 编译安装(make && make install,也可这样写,小编未成功!分开整理如下)
make
make install
- DCMAKE_INSTALL_PREFIX:MySQL安装目录
- DMYSQL_DATADIR:MySQL数据目录,初始时为空
- DSYSCONFDIR:配置文件目录
- DDOWNLOAD_BOOST:取值0或1,是否下载Boost库
- DWITH_BOOST:若不下载Boost库的话,是本地Boost库的位置,若下载Boost表示下载位置
- DDEFAULT_CHARSET:指定默认字符集为utf8mb4,因为历史遗留问题,MySQL中的utf8不是真正的utf8,而是阉割版的,最长只有三个字节,当遇到四个字节的utf8编码时,会导致存储异常。从5.5.3开始,使用utf8mb4实现完整的utf8。
- DDEFAULT_COLLATION:排序规则,默认为utf8mb4_0900_ai_ci,属于utf8mb4_unicode_ci的一种。0900指的是Unicode校对算法版本,ai是指口音不敏感(as表示敏感),ci指不区分大小写(cs表示区分)。utf8mb4_unicode_ci表示基于标准的的Unicode来排序和比较,能够在各种语言之间精确排序,而utf8mb4_general_ci遇到某些特殊的字符集时排序结果可能不一致,准确性较差,但是性能较好,比较和排序时候更快。
- DWITH_EXTRA_CHARSETS:安装所有字符集
编译安装后的目录(etc和var小编后续添加,此环节可忽略)
创建本地连接套接字文件
在主程序目录(/usr/local/mysql)创建“var/mysql.sock”
- TCP/IP(常用)
- mysql -h 192.168.1.108 -uroot -p
- socket
- 在速度上比用tcp的方式更快,但只适用于mysql和应用同在一台PC上,依靠本地的.sock文件。如果不在同一台PC上,就没有办法连接了。
- mysql.sock,其作用是程序与MySQL Server处于同一台机器,发起本地连接时可用。
- 无须定义连接host的具体IP得,只要为空或localhost就可以。 在此种情况下,即使你改变mysql的外部port也是一样可能正常连接。 因为在my.ini中或my.cnf中改变端口后,mysql.sock是随每一次 mysql server启动生成的。已经根据你在更改完my.cnf后重启mysql时重新生成了一次,信息已跟着变更。
设置自定义配置文件
在主程序目录(/usr/local/mysql)创建“etc\my.cnf”配置文件
[client]
port = 18890
socket = /usr/local/mysql/var/mysql.sock
[mysqld]
bind-address = 0.0.0.0
port = 18890
user = root
socket = /usr/local/mysql/var/mysql.sock
lower_case_table_names = 1
character-set-server=utf8
default-storage-engine=INNODB
sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
max_connections=100
query_cache_size= 0
tmp_table_size=35M
thread_cache_size= 8
myisam_max_sort_file_size=100G
myisam_sort_buffer_size=69M
key_buffer_size=55M
read_buffer_size=64K
read_rnd_buffer_size=256K
sort_buffer_size=256K
# wait_timeout=50
innodb_flush_log_at_trx_commit = 0
innodb_log_buffer_size=2M
innodb_buffer_pool_size=107M
innodb_log_file_size=54M
innodb_thread_concurrency=10
max_allowed_packet=100M
初始化数据库
/usr/local/mysql/bin/mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --lower-case-table-names=1
拷贝启动脚本、启动服务、登录数据库(没有密码)
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld /etc/init.d/mysqld start
启动配置密码和允许远程访问
# 登录数据库,然后回车(此时没有密码)
mysql -uroot -p
# 设置密码
ALTER USER'root'@'localhost' IDENTIFIED BY 'password';
# 开启远程访问
create user 'root'@'%' identified by 'password';
#刷新
flush privileges;
自定义启动方式(加载自定义配置文件)
- 编写启动服务“zkmysql.service”
[Unit]
Description=Mysql 5.7
After=network.target
[Service]
Type=simple
ExecStart=/usr/local/mysql/bin/mysqld_safe --defaults-file=/usr/local/mysql/etc/my.cnf --user=root
ExecStop=killall mysqld >/dev/null 2>&1 &
[Install]
WantedBy=multi-user.target
- 启动服务
systemctl start zkmysql
- 停止服务
systemctl stop zkmysql