1、用cmake安装mysql源码
(1)第一种方式安装cmake,yum install gcc gcc-c++ ncurses-devel perl(默认没有安装cmake)
(2)下载cmake源码编译安装,https://cmake.org/download/
2、我本人的文件都放在/usr/local/src下
(1)解压:tar zxvf cmake-3.9.2.tar.gz
(2)cd cmake-3.9.2中
(3)./configure --prefix=/usr/local/cmack #根据需要填写安装路径
(4)make && make install
3、到mysql官网下载源码,https://dev.mysql.com/downloads/mysql/
4.wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-boost-5.7.19.tar.gz 到/usr/local/src下
(1)解压 tar zxvf mysql.boost-5.7.19.tar.gz
(2) mv mysql-5.7.19 /usr/local/mysql #移动MySQL源码到 /usr/local 目录下
(3)cd /usr/local/mysql /下 编译mysql
(4)mysql编译参数配置 注意:#使用 cmake 来编译MySQL(yum安装的直接 cmake 不用加路径)
/usr/local/cmake/bin/cmake . -DWITH_BOOST=/usr/local/mysql/boost \ #根据自身的安装路径调整路径以匹配您的安装
(ps:这一步先编译,在编译下面的参数。本人参数一起编译出现了编译错误)
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \ #安装目录
-DMYSQL_DATADIR=/usr/local/mysql/data \ #数据库存放目录
-DSYSCONFDIR=/etc \ #系统配置目录
-DENABLED_LOCAL_INFILE=1 \ #允许从本地导入数据
-DDEFAULT_CHARSET=utf8 \ #使用 utf8 字符(这里本人安装的utf8mb4后启动报错,最后还是/etc/my.cnf中修改字符集)
-DDEFAULT_COLLATION=utf8_general_ci \ #校验字符
-DEXTRA_CHARSETS=all #安装所有扩展字符集
报错:-- Configuring incomplete, errors occurred!
See also "/usr/local/mysql/CMakeFiles/CMakeOutput.log".
See also "/usr/local/mysql/CMakeFiles/CMakeError.log".
解决方法:缺少 ncurses-devel 直接 yum -y install ncurses-devel
5、make && make install (这步花费时间会很长,看服务器配置)
6、更改/usr/local/mysql的权限配置(ps:参考链接https://dev.mysql.com/doc/refman/5.7/en/binary-installation.html)
(1)#创建 MySQL组和MySQL用户
groupadd mysql
useradd -r -g mysql -s /bin/false mysql
(2)#更改MySQL文件夹权限
chown -R mysql:mysql /usr/local/mysql
(3)#初始化数据库并生成初始密码
/usr/local/mysql/bin/mysqld --initialize --user=mysql # MySQL 5.7.6 and up
(4)记录生成的初始密码::a0esd.M=wQF
报错:
mysqld_safe error: log_error set to '/var/log/mariadb/mariadb.log' however file don't exists .Create writable for user 'mysql'.
解决方法:(/var/log/mariadb/mariadb.log' 不存在导致的)
mkdir /var/log/mariadb && touch /var/log/mariadb/mariadb.log
chown -R mysql:mysql /var/log/mariadb/
(5)启动mysql进程:bin/mysqld_safe--user=mysql&
这时会报错:
mysqld_safe mysqld from pid fiel /var/run/mariadb/mariadb.pid ended
解决方法:('/var/run/mariadb/mariadb.pid' 不存在导致的。)(ps:错误不一定一样,按照日志来解决问题)
mkdir /var/run/mariadb && touch /var/run/mariadb/mariadb.pid
chown -R mysql:mysql /var/run/mariadb/
(6)#登陆到MySQL
/usr/local/mysql/bin/mysql -uroot -p:a0esd.M=wQF
(6.1)报错地方:(这是由于mysql的sock服务不在/etc/my.cnf配置的socket路径不匹配)
Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
解决方法:#软连接 mysql.sock 到 tmp
ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock
(6.2)但是本人添加软件,运行/usr/local/mysql/bin/mysql -uroot -p:a0esd.M=wQF还是报错
--initialize specified but the data directory has files in it. Aborting
解决方法:(说明mysql中的data目录已经有数据了)
cd /etc/lib/mysql下查看没有文件
若有,则mv mysql mysql.bak
再次重新登录运行/usr/local/mysql/bin/mysql -uroot -p:a0esd.M=wQF
(6.3)bin/mysqld--initialize--user=mysql
(ps:bin/mysqld_safe--user=mysql&这条命令在上面命令运行后一定要执行后再次执行/usr/local/mysql/bin/mysql -uroot -p:a0esd.M=wQF命令)
ps:本人卡在这里半天才发现进程没启动,登录不了
7、#修改MySQL初始密码
set password = password('XXXX');
注意:在编译过程中会出现很多无法预知的错误(由于系统版本问题,或者版本库的原因),出错后可以百度问题,基本能解决,文章只做记录,留在以后查看备用