Linux下MySQL数据库编译安装详解

本文同步发表于我的微信公众号,扫一扫文章底部的二维码或在微信搜索 chaodev 即可关注。


一、系统环境

硬件:华为国产服务器(arm架构鲲鹏CPU)
系统:国产中标麒麟(64位)
MySQL版本:5.7.26
在这里插入图片描述

磁盘及内存
在这里插入图片描述

特别说明:这个服务器 CPU 是 arm 架构的,mysql 官网上那些安装包都不行,安装时会无法执行二进制文件,如下
在这里插入图片描述

需要我们自己下载源码包进行编译安装。


二、安装前准备

中标麒麟操作系统有的可能预装了 MySQL,如果已经安装,需要先进行卸载,并且 /etc/my.cnf 已经存在,在安装时,首先执行如下命令,不然在安装的时候会报错。

mv /etc/my.cnf /etc/my.cnf.bak

三、安装步骤

1、boost下载

为什么安装 boost,因为 cmake MySQL 源码包时要使用,MySQL 5.7 需要 boost 1.59 及以上版本,建议使用1.59版本。

下载地址:https://www.boost.org/users/history/version_1_59_0.html
在这里插入图片描述


2、boost安装

解压 boost 并复制到 /usr/local/boost 目录

tar -zxvf boost_1_59_0.tar.gz
cp -r boost_1_59_0 /usr/local/boost

安装

cd /usr/local/boost
./bootstrap.sh

在这里插入图片描述

构建boost库

./b2
./b2 --prefix=/usr/local/boost install

注:bootstrap.sh 是用来检查安装环境的。b2 是上一步成功后生成的,使用它来进行构建 boost 库。


3、MySQL下载

下载地址:https://downloads.mysql.com/archives/community/
在这里插入图片描述

下载源码包,因为我们要自己编译。


4、MySQL安装

4.1 解压
tar -zxvf mysql-5.7.26.tar.gz

复制到 /usr/local/

cp mysql-5.7.26 /usr/local/

4.2 创建mysql用户组和用户

首先检查 mysql 用户组和用户是否存在

cat /etc/group | grep mysql
cat /etc/passwd |grep mysql

创建 mysql 用户组

groupadd mysql

创建用户 mysql 并加入 mysql 用户组

useradd -r -g mysql mysql

更改 mysql 目录下所有的目录及文件夹所属的用户组和用户,以及权限

[root@localhost /]# chown -R mysql:mysql /usr/local/mysql-5.7.26
[root@localhost /]# chmod -R 755 /usr/local/mysql-5.7.26

4.3 安装编译所需组件和依赖包
yum -y install gcc gcc-c++ ncurses ncurses-devel bison libgcrypt perl make cmake
yum -y install ncurses-devel libaio-devel bison perl-Time-HiRes
yum install libatomic

4.4 创建数据目录
mkdir -p /home/mysql/data              #创建目录
chown mysql:mysql -R /home/mysql/data   #赋予权限

4.5 编译

切到目录mysql-5.7.26,使用cmake命令进行编译

cd mysql-5.7.26/
cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql-5.7.26 -DMYSQL_DATADIR=/home/mysql/data -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DMYSQL_TCP_PORT=3306 -DMYSQL_USER=mysql -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_ARCHIVE_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DWITH_MEMORY_STORAGE_ENGINE=1 -DENABLE_DOWNLOADS=1 -DDOWNLOAD_BOOST=1 -DWITH_BOOST=/usr/local/boost

然后使用make命令进行编译

make

在这里插入图片描述

注:如果报错,提示无法分离指令,请看文末解决办法。


4.6 安装

执行 make install 进行安装

make install

在这里插入图片描述


5、环境变量配置

vi /etc/profile

在文尾添加

export PATH=/usr/local/mysql-5.7.26/bin:/usr/local/mysql-5.7.26/lib:$PATH

在这里插入图片描述

运行如下命令,使配置生效

source /etc/profile

6、创建my.cnf文件所需目录

mkdir /usr/local/mysql-5.7.26/tmp
mkdir /usr/local/mysql-5.7.26/run
chmod -R 755 /usr/local/mysql-5.7.26/tmp
chmod -R 755 /usr/local/mysql-5.7.26/run

创建 mysqld.log 和 mysqld.pid 文件

mkdir /usr/local/mysql-5.7.26/logs
mkdir /usr/local/mysql-5.7.26/pids
touch /usr/local/mysql-5.7.26/logs/mysqld.log
touch /usr/local/mysql-5.7.26/pids/mysqld.pid

在这里插入图片描述


7、配置my.cnf文件

在刚开始,对my.cnf 进行了mv,此时可以恢复

cd /etc/
cp my.cnf.bak my.cnf

在这里插入图片描述

修改内容如下:

[mysqld_safe]
log-error=/usr/local/mysql-5.7.26/logs/mysqld.log
pid-file=/usr/local/mysql-5.7.26/pids/mysqld.pid
[mysqldump]
quick
[mysql]
no-auto-rehash
[client]
default-character-set=utf8
[mysqld]
basedir=/usr/local/mysql-5.7.26
tmpdir=/usr/local/mysql-5.7.26/tmp
datadir=/home/mysql/data
socket=/usr/local/mysql-5.7.26/run/mysql.sock
port=3306
user=root
#忽略大小写
lower_case_table_names=1

8、数据库初始化

cd /usr/local/mysql-5.7.26/bin
mysqld --defaults-file=/etc/my.cnf --initialize --basedir=/usr/local/mysql-5.7.26 --datadir=/home/mysql/data --user=mysql

在这里插入图片描述

–initialize 表示默认生成一个安全的密码,–initialize-insecure 表示不生成密码。

初始化后, 会有一行提示, 冒号后面的是初始密码,例如

2020-05-29T08:47:34.659979Z 1 [Note] A temporary password is generated for root@localhost: wpDnIn.du1ce

这里的初始密码就是:wpDnIn.du1ce


9、启动MySQL

将mysql服务文件拷贝到 /etc/init.d/ 目录,并给出执行权限

cp support-files/mysql.server /etc/init.d/mysqld
chmod a+x /etc/init.d/mysqld

在这里插入图片描述

启动MySQL

service mysqld start

四、相关使用

1、修改密码

登录 mysql

/usr/local/mysql-5.7.26/bin/mysql -uroot -p -S /usr/local/mysql-5.7.26/run/mysql.sock

修改密码

mysql>set password for root@localhost = password('123456');

2、开放远程连接

mysql>use mysql;
mysql>select Host,User,authentication_string from user;
msyql>update user set user.Host='%' where user.User='root';
mysql>flush privileges;

五、防火墙配置

如果防火墙未打开则开启防火墙,启动 firewall 服务,如下

systemctl start firewalld

mysql 默认端口3306,需要开放,如下

#永久开放3306端口
firewall-cmd --add-port=3306/tcp --permanent --zone=public
#重启防火墙
firewall-cmd --reload

六、问题及解决方法

1、数据库初始化无法执行二进制文件

[root@localhost bin]# ./mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/home/mysql/data
-bash: ./mysqld: 无法执行二进制文件

在这里插入图片描述

原因:安装包不适用此cpu内核架构
解决方法:需要重新编译mysql源码包


2、编译安装包时报错,提示无法分离指令

在这里插入图片描述

解决方法:切换到源码包下,修改下面这个文件

vi storage/innobase/CMakeLists.txt

在这里插入图片描述

将这段内容修改为如下:

IF(CMAKE_COMPILER_IS_GNUCXX AND CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64")
  # Bug was fixed in GCC 5.2, so workaround only needed < 5.2
  EXECUTE_PROCESS(COMMAND ${CMAKE_C_COMPILER} -dumpversion
                  OUTPUT_VARIABLE GCC_VERSION)
  IF(GCC_VERSION VERSION_LESS 5.2)
    INCLUDE(${MYSQL_CMAKE_SCRIPT_DIR}/compile_flags.cmake)
    ADD_COMPILE_FLAGS(
      btr/btr0btr.cc
      btr/btr0cur.cc
      buf/buf0buf.cc
      gis/gis0sea.cc
      handler/handler0alter.cc
      mtr/mtr0mtr.cc
      row/row0merge.cc
      row/row0mysql.cc
      row/row0trunc.cc
      srv/srv0srv.cc
      fts/fts0fts.cc
      COMPILE_FLAGS "-O0"
      )
  ENDIF()
ENDIF()

在这里插入图片描述


3、启动 mysql 报错

在这里插入图片描述

查看没有那个 pid 文件
在这里插入图片描述

再通过 service mysql status 命令来查看mysql 的启动状态 报错如下:

[root@localhost data]# service mysqld status
 ERROR! MySQL is not running, but lock file (/var/lock/subsys/mysql) exists

在这里插入图片描述

找到并删除这个mysql文件即可。



觉得有帮助点个赞吧!!!
原创不易,转载请注明出处。

微信扫一扫下方二维码即可关注我的公众号

猜你喜欢

转载自blog.csdn.net/xch_yang/article/details/114916882