源码安装mysql-5.7.13一周的冤枉路总结。满满的都是泪啊
MySQL从5.5以后都是用cmake来进行安装。
5.7.5开始安装环境需要boost库的支持
下载安装包:
https://cdn.mysql.com/archives/mysql-5.7/mysql-5.7.13.tar.gz
https://jaist.dl.sourceforge.net/project/boost/boost/1.59.0/boost_1_59_0.tar.gz
tar解压安装包。
需要的编译环境:make gcc gcc-c++ ncurses-devel openssl openssl-devel bison*
ps:编译环境一定要装全,被坑了两星期悟出的血的教训。
正式安装前一定查看有没有安装MySQL的rpm包。如果有的话先卸载。有的系统会自带有mariadb建议同样卸载。
编译:
cmake . -DCMAKE_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/data/mydata \
-DSYSCONFDIR=/etc \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_READLINE=1 \
-DWITH_LIBWRAP=0 \
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock \
-DWITH_SSL=system \
-DWITH_ZLIB=system \
-DWITH_BOOST=/document/tar/boost_1_59_0 \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci
ps:感觉参数比较多在命令行里不好写,可以写成脚本。出现问题,把问题粘到百度上找吧。基本上都是编译环境的问题。缺什么包直接装什么包就行了。
只要以上没问题,就可以按照make ; make install 的套路走了。这一步比较慢,视机器性能而定。
如果编译出现问题需要重新编译记得
make clean #清除编译缓存
rm CMakeCache.txt #删除生成的文件
安装完成。
创建mysql用户
useradd mysql
将MySQL的安装目录更改属主和属组为mysql。
chown -R mysql:mysql /usr/local/mysql
在mysql目录下创建mysql-files目录
mkdir mysql-files
ps:默认时没有这个目录的。见别人创建我也创建了。也不知道是干啥用的。
然后是初始化目录
./bin/mysqld --initialize --user=mysql
第一次初始化的时候在最后会有一串类似乱码的东西。那是个临时密码。(然而并没有什么卵用。因为你可能压根就启动不起来)
ps:初始化默认只能进行一次。如果继续初始化的话。需要把配置文件my.cnf中的数据目录清空。同样,如果要更改数据存放目录。也要重新进行初始化。
配置文件解析:
[mysqld] datadir=/data/mydata #数据目录 socket=/var/lib/mysql/mysql.sock # Disabling symbolic-links is recommended to prevent assorted security risks symbolic-links=0 skip-grant-tables #这个是默认没有的,跳过密码登陆。 # Settings user and group are ignored when systemd is used. # If you need to run mysqld under a different user or group, # customize your systemd unit file for mariadb according to the # instructions in http://fedoraproject.org/wiki/Systemd
[mysqld_safe] log-error=/var/log/mysql/error.log #错误日志文件 pid-file=/var/run/mysql/mysql.pid #进程PID
# # include all files from the config directory # !includedir /etc/my.cnf.d |
启动mysql
./support-files/mysql.server start
ps:如果能启动起来,只能说你运气逆天
如果启动不起来,查看my.cnf
如果是:
[mysqld_safe]
log-error=/var/log/mariadb/error.log
pid-file=/var/run/mariadb/mariadb.pid
将mariadb更改为mysql。再查看有没有这两个路径,如果没有就创建这两个目录。只创建目录,不创建文件。
注意属组和属主要是mysql。
然后重新启动。
如果临时密码忘了或者是临时密码登陆不进去。更改密码:./bin/mysqladmin -u root password "root" #注意路径问题。
如果登陆或更改密码时报错:
[root@localhost mysql]# ./bin/mysql -uroot -p
Enter password:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
ps:被这问题缠绕了一天。解决办法就是用find在根目录下查找mysql.sock文件。然后做个软链接到报错的路径。
[root@localhost mysql]# find / -name mysql.sock
find: ‘/run/user/1001/gvfs’: 权限不够
/var/lib/mysql/mysql.sock
[root@localhost mysql]# ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock
根据个人找到的路径不同做更改,具体原理参照下面链接。非常详细。
https://www.cnblogs.com/Lam7/p/6090975.html ps:感谢
然后重新启动服务。可以先用跳过密码登陆。
my.cnf配置文件中加:skip-grant-tables
登陆后更改密码:
update mysql.user set authentication_string=password("root") where user;
如果用随机密码登陆需要先更改密码:set password=password('new password')要不然无论什么操作都会提醒You must reset your password using ALTER USER statement before executing this statement.
ps:整个过程找问题找资料找了一周,希望这篇文章能让你少走点冤路。
附:
创建远程用户:
grant all privileges on *.* to admin@"%" identified by "password";
all privileges 表示所有权限
*.* 表示所有库下所有表
admin 用户名
% 所有主机地址
identified by 关键字,后跟密码
password 密码