X86/ARM服务器自建mysql数据库

avatar
作者
筋斗云
阅读量:1

接上一篇

应用容器化改造-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/weixin_53439529/article/details/137045255应用后端需要写入数据库,比较方便的就是在服务器自建一个mysql数据库,还能顺便测一下并发数对后端数据库服务器的压力。

rpm安装】 X86的虚拟机可以用rpm包安装数据库,比较方便:

cd /opt

#获取安装包:

wget https://sandbox-expriment-files.obs.cn-north-1.myhuaweicloud.com:443/20220530/MySQL-5.6.45-1.el6.x86_64.rpm-bundle.tar

mkdir mysql_install

tar -xvf MySQL-5.6.45-1.el6.x86_64.rpm-bundle.tar -C mysql_install

cd mysql_install

yum -y remove mariadb*

yum install -y MySQL-shared-compat-5.6.45-1.el6.x86_64.rpm

yum install -y MySQL-server-5.6.45-1.el6.x86_64.rpm

yum install -y MySQL-client-5.6.45-1.el6.x86_64.rpm

yum install -y MySQL-devel-5.6.45-1.el6.x86_64.rpm

yum install -y MySQL-shared-5.6.45-1.el6.x86_64.rpm

如果没有网络环境,离线的rpm文件安装也可以:rpm -ivh --force 文件.rpm

【修改配置文件】

新增my.cnf配置:

cat << EOF >> /etc/my.cnf

[mysqld]

join_buffer_size = 128M

sort_buffer_size = 2M

read_rnd_buffer_size = 2M

datadir=/var/lib/mysql

socket=/var/lib/mysql/mysql.sock

# Disabling symbolic-links is recommended to prevent assorted security risks

lower_case_table_names = 1

innodb_strict_mode = 1

sql_mode =

symbolic-links=0

character_set_server = utf8

log-bin = mysql-bin

binlog_format=row

server-id = 2

expire_logs_days = 10

slave_skip_errors = 1062

innodb_strict_mode = 0

[mysqld_safe]

log-error=/var/log/mysqld.log

pid-file=/var/run/mysqld/mysqld.pid

EOF

cat /etc/my.cnf

直接在/etc/新增了my.cnf文件

如果mysql本身的配置文件my.cnf该有的配置都有,也可以备份然后vim原来的my.cnf文件,软链接到/etc/my.cnf

修改配置文件:cp my.cnf my.cnf_bak 

vim /etc/my.cnf

创建配置文件的软链接

ln -sf /usr/local/mysql/my.cnf /etc/my.cnf

【启动服务】

systemctl start mysql

systemctl status mysql

【添加环境变量】

有时候启动mysql或mysqld服务,会找不到mysql_home地址,需要先把mysql的位置加到环境变量里:

vim /etc/profile

# 在尾部添加

export MYSQL_HOME=/usr/local/mysql

export PATH=$PATH:$MYSQL_HOME/bin

刷新环境变量

source /etc/profile

修改密码】

#用脚本修改密码,这个方法好处是不用进mysql操作比较简单,但是需要安装expect插件:vim mysql_pass.sh

#!/bin/bash

# 安装expect插件

yum install -y expect

# 修改密码为password(/root/.mysql_secret是数据库安装过程中自动生成的密码文件,保存原始密码,也有可能没有)

pass=`awk -F"[ :]+" 'NR==1{print $NF}' /root/.mysql_secret`

/bin/expect << EOF

spawn /usr/bin/mysql -h127.0.0.1 -uroot -p`echo -e $pass`

expect "mysql>"

send "SET PASSWORD FOR root@localhost=PASSWORD('password');"

send "\n"

expect "mysql>"

send 'flush privileges\n'

expect "mysql>"

send 'quit\n'

interact

EOF

chmod +x mysql_pass.sh

./mysql_pass.sh

​​​​​​​【设置访问权限】

设置mysql数据库允许其他用户远程连接(对应10038错误):

修改远程mysql的配置文件,取消bind-addresss属性的默认值127.0.0.1,以允许其他用户进行连接。安装后可能会存在多个.cnf配置文件,所以需要找出有效的配置文件所在位置 并对其进行修改

cd /etc/mysql/

查看mysql的真实/有效的配置文件位置 ( grep -rn "skip-networking" *)

修改真实的mysql配置文件

注释掉配置文件中 bin-address属性: # bind-address=127.0.0.1

设置或授权访问用户(对应1130错误):

通过上一步操作,服务器上的MySQL已经可被远程连接了,但是光这样还不行,还必须对访问的所有用户进行设置或授权,之后才可以正常远程连接。

/usr/bin/mysql -uroot -p

grant all privileges on *.* to root@"%" identified by "password";

flush privileges;

【XC环境安装】

XC服务器是飞腾ARM64-UOS统信操作系统,对应的linux版本为debian,debian是不能用rpm安装的,但是服务器可以出网访问,所以直接apt安装就行

apt install -y mysql-server-5.7(最好是指定版本,自动获取的版本有问题)

【修改my.cnf文件】

与X86方式一致。

​​​​​​​【 修改密码】

因为debian环境自动获取的数据库安装时没有生成临时密码文件,所以用mysql_secure_installation命令修改mysql密码,用该密码登录进去mysql -u root  -p

SELECT User, Host, authentication_string FROM mysql.user WHERE User='root';

可以看到root@localhost 是空的密码

ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';没有生效

SET PASSWORD FOR root@localhost = 'password';

这个命令有点问题:'root'@'localhost' as authentication plugin does not support it.  该错误提示表明使用的身份验证插件不支持通过 SET PASSWORD 语句更改密码。要确定使用的身份验证插件,可以运行以下命令:

SHOW VARIABLES LIKE 'default_authentication_plugin';

显示mysql_native_password

更改语句为:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

commit;

flush privileges;

为了达到密码强度要求,密码要设置比较复杂,如果要改简单密码,可以运行以下命令临时禁用密码验证插件:

UNINSTALL PLUGIN validate_password; 然后修改成简单点的密码(最好不要)

另一种方式:

mysql5.7安装完成后,root用户密码默认为空:输入mysql回车后显示了mysql的相关信息,表示已登录到mysql服务器了,也就表示初始/默认密码为空。所以需要设置一下root用户密码。

SET PASSWORD FOR root@localhost=PASSWORD('xuyijing0103!');

flush privileges;

修改成功后,即可通过执行:mysql -uroot -p 回车,输入密码,回车登录

ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';

flush privileges;

【离线安装】

有时候XC服务器没有网络环境,也就没法apt自动install,也可以使用离线安装包安装,当然需要先获取arm架构的离线包:

https://obs.cn-north-4.myhuaweicloud.com/obs-mirror-ftp4/database/mysql-5.7.27-aarch64.tar.gz

#关闭防火墙禁止开机自动启动

systemctl stop firewalld.service && systemctl disable firewalld.service && service iptables stop

#关闭SELINUX

sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux

#创建mysql用户和组,mysql用户不能登录系统选项,不创建用户的主目录。

groupadd -r mysql && useradd -r -g mysql -s /sbin/nologin -M mysql

#卸载系统自带的依赖包,会存在冲突

rpm -qa | grep mariadb

rpm -qa | grep mysql

rpm -e --nodeps 删除已经安装的MYSQL包

wget https://obs.cn-north-4.myhuaweicloud.com/obs-mirror-ftp4/database/mysql-5.7.27-aarch64.tar.gz

tar -xvf mysql-5.7.27-aarch64.tar.gz -C /usr/local/

将解压后的目录改名为 mysql

cd /usr/local/

mv mysql-5.7.27-aarch64 mysql

chown -R mysql mysql/

chgrp -R mysql mysql/

cd mysql/

mkdir data

chown -R mysql:mysql data

安装依赖:yum install -y libaio* libatomic* libstdc*

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 my.cnf my.cnf_bak 

vim /etc/my.cnf

创建配置文件的软链接

ln -sf /usr/local/mysql/my.cnf /etc/my.cnf

#无密码初始化

mysqld --initialize-insecure

#开启mysql

systemctl start mysqld

离线初始化mysqld报了一个很诡异的错误:mysqld --initialize-insecure --user=mysql 

 -bash: mysqld: command not found已经安装了mysql还提示没有,而且直接mysql命令也提示ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/dev/shm/mysql.sock' (2) 到dev/shm/目录下查看确实没有这个本地链接服务器,说明MySQL 服务器没有正常安装上。

systemctl status mysql 里面也有错误:-- The unit mysqld.service has entered the 'failed' state with result 'exit-code'. Mar 22 18:11:06 0002.novalocal systemd[1]: Failed to start LSB: start and stop MySQL.

一开始以为是指定的安装目录没有写入的权限,结果改了一下目录还是没有权限:mysqld --initialize-insecure --user=mysql --basedir=/opt/mysql_install/data/mysql --datadir=/opt/mysql_install/data/mysql_data mysqld: Can't change dir to '/opt/mysql_install/data/mysql_data/' (Errcode: 13 - Permission denied) 

总不能是所有的服务器目录都没有权限吧,所以怀疑是使用的用户没有权限,但是登录用的是root,只有安装mysql用的是一个新建的用户mysql,在系统日志message.log里面有更详细的错误:Starting MySQL.... ERROR! The server quit without updating PID file (/var/lib/mysql/data/mysql.pid). Mar 26 19:59:40 i-p272ozdj systemd[1]: mysqld.service: Control process exited, code=exited, status=1/FAILURE

怀疑是这个新用户mysql没有权限写入pid文件,MySQL 服务器启动时可能无法写入 PID 文件所在的目录。但是mysql安装目录下所有文件都是owner都是mysql,而且读写权限也都授权了,无奈。把用户换成root用户就可以了,可能是服务器交付时做了什么限制。

​​​​​​​【 卸载 MySQL】

打开终端,使用 root 用户或具有管理员权限的用户登录。

停止 MySQL 服务:systemctl stop mysql

移除 MySQL 包:apt remove --purge mysql-server mysql-client mysql-common

此命令将卸载 MySQL 服务器、客户端和共享组件。

移除与 MySQL 相关的配置文件:rm -rf /etc/mysql /var/lib/mysql /var/log/mysql

这将删除 MySQL 的配置文件、数据目录和日志文件。

清理残余的数据库文件:apt autoremove

此命令将自动删除可能仍然存在的 MySQL 相关的依赖项和残余文件。

在卸载 MySQL 数据库之前,确保已备份重要的数据库和数据。

---------------------------------------------------------------------------------------------------------------------------------

最新申请了一个鲲鹏虚拟机,安装mysql有又出现一个怪怪的问题,其实之前也出现过,但是一顿操作就没有了,也不知道是怎么解决的,这次倒是正好找到原因了,报错如下:

systemctl start mysqld启动报错Failed to start mysqld.service: Unit mysqld.service not found.

systemctl start mysql也一样,总是报错服务单元不存在,但是很确定mysql已经安装成功了。在/etc/init.d下是服务单元的配置信息,并没有mysqld,感觉是没有自动把mysqld.service注册到服务里面。

#手动把mysql服务软链接到服务单元,mysql设置开机自启动也需要这一步

cp -rf /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld

chmod +x /etc/init.d/mysqld

#重新加载服务 systemctl daemon-reload

​​​​​​​这时候再启动mysql就正常了

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!