先准备MySQL的安装包,可以去官网下载,也可以在其它镜像资源网站下载。
搜狐的http://mirrors.sohu.com/mysql/MySQL-5.7/
。
MySQL5.7需要boost_1.59,指明了就这个版本的,其它版本不行。也可以下载包含boost的mysql:mysql-boost-5.7.X。
安装预装软件依赖包
yum -y install gcc gcc-c++ ncurses ncurses-devel cmake bison bison-devel
gcc我的系统已经自带安装了,cmake在yum里的版本有点低,我换了个高点的。这都没关系,不换也行。
cmake的安装
下载安装包: wget https://cmake.org/files/v3.7/cmake-3.7.1.tar.gz
解压:tar zvxf cmake-3.7.1.tar.gz
;
进入解压包目录,ls
以下,会看到有configure和bootstrap。执行./bootstrap
,然后make && make install
。
就这样就安装完cmake了。
安装MySQL
cd /usr/local/src
tar -zvxf mysql-5.7.17.tar.gz
cd mysql-5.7.17
添加mysql运行组及用户、创建数据库数据文件文件夹并授予合适权限:
Trip:/bin/false是最严格的禁止login选项,一切服务都不能用,而/sbin/nologin只是不允许系统login,可以使用其他ftp等服务。如果想要用false在禁止login的同时允许ftp,则必须在/etc/shells里增加一行/bin/false。为了系统安全,这里建议使用/bin/false。
groupadd mysql && useradd -g mysql mysql -s /bin/false
mkdir -p /data/mysql &&
chown -R mysql:mysql /data/mysql
预编译MySQL
tar mysql-5.7.17.tar.gz
cd mysql-5.7.17
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/data/mysql \
-DWITH_BOOST=/usr/local/boost \
-DMYSQL_TCP_PORT=3306 \
-DSYSCONFDIR=/etc \
-DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \
-DDEFAULT_CHARSET=utf8mb4 \
-DDEFAULT_COLLATION=utf8mb4_general_ci \
-DEXTRA_CHARSETS=all \
-DWITH_EXTRA_CHARSETS:STRING=all \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_DEBUG=0 \
-DENABLED_LOCAL_INFILE=1
然后等,我的服务器是1核1G的,等了一个半小时。如果配置高的话,速度会快些。
等预编译完成后,就开始安装。
make
make install
设置启动脚本,开机自启动
ls -lrt /usr/local/mysql
[root@xx mysql-5.7.17]# cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
[root@xx mysql-5.7.17]# chmod +x /etc/init.d/mysqld
[root@xx mysql-5.7.17]# systemctl enable mysqld
mysqld.service is not a native service, redirecting to /sbin/chkconfig.
Executing /sbin/chkconfig mysqld on
上面的意思是设置开机启动要用 chkconfig mysqld on
。
设置配置文件
找mysql/support-files/my-default.cnf文件,复制移动到 /etc/下,重命名为 my.cnf,原来的可能是玛利亚DB的,可以备份或删掉。
mv /etc/my.cnf /etc/my.cnf.bak
cp my-default.cnf /etc/my.cnf
开始正式设置配置文件,改my.cnf的内容
[client]
port = 3306
socket = /usr/local/mysql/mysql.sock
[mysqld]
port = 3306
socket = /usr/local/mysql/mysql.sock
basedir = /usr/local/mysql
datadir = /data/mysql
pid-file = /data/mysql/mysql.pid
user = mysql
server-id = 1
大概我只设置了这么多其它的默认,以后要改要调整再来这里改。
添加mysql的环境变量
echo -e '\n\nexport PATH=/usr/local/mysql/bin:$PATH\n' >> /etc/profile && source /etc/profile
意思就是在/etc/profile这个文件的最后添加PATH=/usr/local/mysql/bin:$PATH
,然后执行 source /etc/profile
。
初始化数据库
mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql
启动数据库
[root@xx mysql-5.7.17]# systemctl start mysqld
[root@xx mysql-5.7.17]# systemctl status mysqld
● mysqld.service - LSB: start and stop MySQL
Loaded: loaded (/etc/rc.d/init.d/mysqld)
Active: active (running) since 一 2016-07-18 11:15:35 CST; 8s ago
Docs: man:systemd-sysv-generator(8)
Process: 23927 ExecStart=/etc/rc.d/init.d/mysqld start (code=exited, status=0/SUCCESS)
CGroup: /system.slice/mysqld.service
├─23940 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/data/mysql --pid-file=/data/mysql/mysql.pid
└─24776 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/data/mysql --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/data/mysql/mysql-err...
7月 18 11:15:32 snails systemd[1]: Starting LSB: start and stop MySQL...
7月 18 11:15:35 snails mysqld[23927]: Starting MySQL..[ OK ]
7月 18 11:15:35 snails systemd[1]: Started LSB: start and stop MySQL.
拷贝的别人的,大概就是这个样子。
查看MySQL服务进程和端口
[root@xx mysql-5.7.17]# ps -ef | grep mysql
root 23940 1 0 11:15 ? 00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/data/mysql --pid-file=/data/mysql/mysql.pid
mysql 24776 23940 0 11:15 ? 00:00:00 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/data/mysql --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/data/mysql/mysql-error.log --open-files-limit=65535 --pid-file=/data/mysql/mysql.pid --socket=/usr/local/mysql/mysql.sock --port=3306
[root@xx mysql-5.7.17]# netstat -tunpl | grep 3306
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 24776/mysqld
设置数据库root用户密码
MySQL和Oracle数据库一样,数据库也默认自带了一个 root 用户(这个和当前Linux主机上的root用户是完全不搭边的),我们在设置好MySQL数据库的安全配置后初始化root用户的密码。配制过程中,一路输入 y 就行了。这里只说明下MySQL5.7.17版本中,用户密码策略分成低级 LOW 、中等 MEDIUM 和超强 STRONG 三种,推荐使用中等 MEDIUM 级别!
[root@xx mysql-5.7.17]# mysql_secure_installation
看提示,要你输入1或2或3。密码强度就是长度大于8位,大小写,数字,特殊符号之类的。看着选择,并设置密码就行。
将MySQL数据库的动态链接库共享至系统链接库
一般MySQL数据库还会被类似于PHP等服务调用,所以我们需要将MySQL编译后的lib库文件添加至当前Linux主机链接库 /etc/ld.so.conf.d/
下,这样MySQL服务就可以被其它服务调用了。
[root@xx mysql-5.7.17]# ldconfig |grep mysql
[root@xx mysql-5.7.17]# echo "/usr/local/mysql/lib" > /etc/ld.so.conf.d/mysql.conf
[root@xx mysql-5.7.17]# ldconfig
[root@xx mysql-5.7.17]# ldconfig -v |grep mysql
ldconfig: 无法对 /libx32 进行 stat 操作: 没有那个文件或目录
ldconfig: 多次给出路径“/usr/lib”
ldconfig: 多次给出路径“/usr/lib64”
ldconfig: 无法对 /usr/libx32 进行 stat 操作: 没有那个文件或目录
/usr/lib64/mysql:
libmysqlclient.so.18 -> libmysqlclient.so.18.0.0
/usr/local/mysql/lib:
libmysqlclient.so.20 -> libmysqlclient.so.20.3.0
到这里已经差不多了,编译安装真的太累了。以后还是用yum安装。
如果要想设置远程访问数据库,记得设置防火墙,开放端口。