本文同步发表于我的微信公众号,扫一扫文章底部的二维码或在微信搜索 chaodev 即可关注。
硬件:华为国产服务器(arm架构鲲鹏CPU)
系统:国产中标麒麟(64位)
MySQL版本:5.7.26
特别说明:这个服务器 CPU 是 arm 架构的,mysql 官网上那些安装包都不行,安装时会无法执行二进制文件,如下
需要我们自己下载源码包进行编译安装。
中标麒麟操作系统有的可能预装了 MySQL,如果已经安装,需要先进行卸载,并且 /etc/my.cnf 已经存在,在安装时,首先执行如下命令,不然在安装的时候会报错。
mv /etc/my.cnf /etc/my.cnf.bak
为什么安装 boost,因为 cmake MySQL 源码包时要使用,MySQL 5.7 需要 boost 1.59 及以上版本,建议使用1.59版本。
下载地址:https://www.boost.org/users/history/version_1_59_0.html
解压 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 库。
下载地址:https://downloads.mysql.com/archives/community/
下载源码包,因为我们要自己编译。
tar -zxvf mysql-5.7.26.tar.gz
复制到 /usr/local/
cp mysql-5.7.26 /usr/local/
首先检查 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
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
mkdir -p /home/mysql/data #创建目录
chown mysql:mysql -R /home/mysql/data #赋予权限
切到目录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
注:如果报错,提示无法分离指令,请看文末解决办法。
执行 make install 进行安装
make install
vi /etc/profile
在文尾添加
export PATH=/usr/local/mysql-5.7.26/bin:/usr/local/mysql-5.7.26/lib:$PATH
运行如下命令,使配置生效
source /etc/profile
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
在刚开始,对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
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
将mysql服务文件拷贝到 /etc/init.d/ 目录,并给出执行权限
cp support-files/mysql.server /etc/init.d/mysqld
chmod a+x /etc/init.d/mysqld
启动MySQL
service mysqld start
登录 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');
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
[root@localhost bin]# ./mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/home/mysql/data
-bash: ./mysqld: 无法执行二进制文件
原因:安装包不适用此cpu内核架构
解决方法:需要重新编译mysql源码包
解决方法:切换到源码包下,修改下面这个文件
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()
再通过 service mysql status 命令来查看mysql 的启动状态 报错如下:
[root@localhost data]# service mysqld status
ERROR! MySQL is not running, but lock file (/var/lock/subsys/mysql) exists
找到并删除这个mysql文件即可。
觉得有帮助点个赞吧!!!
原创不易,转载请注明出处。
微信扫一扫下方二维码即可关注我的公众号