一. 实测环境
腾讯云主机CentOS7.2、 MySQL8.0.16
二. 准备工作
-
下载源码包:
#不带boost库的版本,安装过程中会联网下载 wget https://cdn.mysql.com//Downloads/MySQL-8.0/mysql-8.0.16.tar.gz #带有boost库的版本----建议下载该版本 wget https://cdn.mysql.com//Downloads/MySQL-8.0/mysql-boost-8.0.16.tar.gz
-
创建mysql用户
groupadd mysql useradd -g mysql mysql
-
创建安装目录和数据目录
mkdir -p /usr/local/mysql mkdir -p /data/mysql
-
依赖安装
#yum -y install cmake #根据平台不同,使用cmake命令或者cmake3命令(实测时,在上述安装环境下即使安装了cmake命令也无法使用,需要使用cmake3命令) yum -y install cmake3 git openssl openssl-devel ncurses-devel
MySQL 8.0源代码允许使用C++14特性。为了在所有支持的平台上实现良好的C++14支持,最低需要使用GCC 5.3。若执行cmake或cmake3命令时出现如下错误Could not find devtoolset gcc且确认已安装devtoolset和gcc依赖,请查看mysql-8.0.16文件夹中CMakeLists.txt文件,确认其中的devtoolset和gcc版本是否比系统已安装版本高,即已安装版本过低则需要升级devtoolset和gcc。
#借助devtoolset升级GCC yum -y install centos-release-scl-rh centos-release-scl yum -y install devtoolset-8-gcc devtoolset-8-gcc-c++ #重启devtoolset,仅对本次shell有效,可加入~/,bashrc中确保每次均有效 source /opt/rh/devtoolset-8/enable #通过gcc -v即可查看升级之后的GCC版本(本文升级后的gcc版本为8.3.1)
三. 安装MySQL8.0
-
安装
① 解压
tar -zxvf mysql-8.0.16.tar.gz -C /usr/local
② 编译&安装
cd /usr/local/mysql-8.0.16 #使用带有boost库的源码时,可以不用添加-DDOWNLOAD_BOOST=1。在使用无boost库的源码安装时,添加-DDOWNLOAD_BOOST=1参数,会自动进行下载相关库文件到指定位置(即DWITH_BOOST指定的位置) cmake3 . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/usr/local/mysql/data -DSYSCONFDIR=/etc -DMYSQL_TCP_PORT=3306 -DWITH_BOOST=/usr/local/mysql-8.0.16/boost -DDOWNLOAD_BOOST=1 make && make install
若执行cmake3命令时,提示Please do not build in-source. Out-of source builds are highly的错误信息,则需要调整执行命令的位置。例如:
mkdir -p /usr/local/mysql-8.0.16/build cd /usr/local/mysql-8.0.16/build #注意此处cmake3后面是.. cmake3 .. -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/usr/local/mysql/data -DSYSCONFDIR=/etc -DMYSQL_TCP_PORT=3306 -DWITH_BOOST=/usr/local/mysql-8.0.16/boost -DDOWNLOAD_BOOST=1 make && make install
③ 注意事项
I. 若使用的是不带boost库的源码安装,该过程需要下载boost库,网络不好的情况下可能速度较慢,且会出现下载中途超时取消导致失败的情况。
II. cmake命令报错修复后再重新执行时,建议先删除CMakeCache.txt文件再执行相关命令。
III. make && make install若出现报错重新执行时,先make clean再删除CMakeCache.txt文件,再执行make && make install(根据实际情况,可能会需要重新执行cmake命令)。
IV. 对于make编译,如果是阿里云centos主机内存小于2G的,可能会在make编译到45%、63%时报错;如果是腾讯云centos主机内存为1G时,可能会在make编译到64%时报错。
===============阿里云测试结果(引用)================== c++: Internal error: Killed (program cc1plus) Please submit a full bug report. See <http://bugzilla.redhat.com/bugzilla> for instructions. make[2]: *** [sql/CMakeFiles/sql.dir/item_geofunc.cc.o] Error 1 make[1]: *** [sql/CMakeFiles/sql.dir/all] Error 2 make: *** [all] Error 2 ================腾讯云测试结果(实测)================= g++: fatal error: Killed signal terminated program cc1plus compilation terminated. make[2]: *** [sql/CMakeFiles/sql_gis.dir/gis/crosses.cc.o] Error 1 make[1]: *** [sql/CMakeFiles/sql_gis.dir/all] Error 2 make: *** [all] Error 2
以上均为内存不足所致,可通过设置2G交换分区来解决该问题。
#获取要增加的2G的SWAP文件块 dd if=/dev/zero of=/swapfile bs=1k count=2048000 #创建SWAP文件 mkswap /swapfile #激活SWAP文件 swapon /swapfile #查看SWAP信息是否正确 swapon -s #添加到fstab文件中让系统引导时自动启动 echo "/var/swapfile swap swap defaults 0 0" >> /etc/fstab
swapfile文件的路径在/var/下,编译完后, 如果不想要交换分区了, 可以删除。
swapoff /swapfile rm -rf /swapfile
ps.关于阿里云centos主机内存问题,未进行实测,参见引用贴。实际操作中只使用了腾讯云centos主机进行测试。
④ 补充说明
cmake常用参数
CMAKE_INSTALL_PREFIX:指定MySQL程序的安装目录,默认/usr/local/mysql DEFAULT_CHARSET:指定服务器默认字符集,默认latin1 DEFAULT_COLLATION:指定服务器默认的校对规则,默认latin1_general_ci ENABLED_LOCAL_INFILE:指定是否允许本地执行LOAD DATA INFILE,默认OFF WITH_COMMENT:指定编译备注信息 WITH_xxx_STORAGE_ENGINE:指定静态编译到mysql的存储引擎,MyISAM,MERGE,MEMBER以及CSV四种引擎默认即被编译至服务器,不需要特别指定。 WITHOUT_xxx_STORAGE_ENGINE:指定不编译的存储引擎 SYSCONFDIR:初始化参数文件目录 MYSQL_DATADIR:数据文件目录 MYSQL_TCP_PORT:服务端口号,默认3306 MYSQL_UNIX_ADDR:socket文件路径,默认/tmp/mysql.sock
-
配置及授权
① 配置my.cnf文件
cat /etc/my.cnf
[mysqld] server-id=1 port=3306 basedir=/usr/local/mysql datadir=/data/mysql socket=/data/mysql/mysql.sock symbolic-links=0 [mysqld_safe] log-error=/data/mysql/mariadb.log pid-file=/data/mysql/mariadb.pid
② 目录权限修改
chown -R mysql:mysql /usr/local/mysql chown -R mysql:mysql /data/mysql chmod 755 /usr/local/mysql -R chmod 755 /data/mysql -R
-
初始化并启动mysql
cd /usr/local/mysql #初始化会返回临时密码,暂存供后面修改使用 #[Note] [MY-010454] [Server] A temporary password is generated for root@localhost: ltdowco&g8rG bin/mysqld --initialize --user=mysql --datadir=/data/mysql/ bin/mysql_ssl_rsa_setup #启动 bin/mysqld_safe --user=mysql &
-
修改账号密码
bin/mysql -uroot -p
此时需要输入上一步中暂存的临时密码,由于my.cnf中修改了mysql.socket,此处会出现Can 't connect to local MySQL server through socket '/tmp/mysql.sock '(2) 错误,可通过软连接解决该问题。
ln -s /data/mysql/mysql.sock /tmp/mysql.sock
再次执行bin/mysql -uroot -p输入密码即可进入mysql
mysql> alter user 'root'@'localhost' identified by '111111'; mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | +--------------------+ 4 rows in set (0.00 sec)
添加远程账号
mysql> create user root@'%' identified by '111111'; mysql> grant all privileges on *.* to root@'%'; mysql> flush privileges;
-
添加到启动项
#复制mysql.server cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld #赋予可执行权限 chmod +x /etc/init.d/mysqld #添加为服务 chkconfig --add mysqld #查看服务列表 chkconfig --list
参考原文如下: