mysql 是一款开源,免费的关系型数据库软件,使用它的优点,我们自然不用多说。
他的安装方式,有两种,一种是使用二进制包,也就是 rpm 包和 deb 包,可以使用 yum 或者 apt-get 来安装,另外一种就是使用源代码编译安装的方式,本次讲解一下源码编译安装 mysql 。
本次环境:系统使用 linux CentOS 6.7 , mysql 版本为 mysql-5.5.42
使用源代码编译安装,那么肯定需要开发环境,比如说 gcc 编译器,这些开发环境,可以使用 yum 来安装,或者 apt-get
yum -y install gcc gcc-c++ openssl openssl-devel ncurses ncurses-devel cmake make
若是 ubuntu 或者 debian 等系统,可以使用 apt-get 来安装,命令如下:
apt-get update
apt-get -y install gcc g++ openssl libncurses5 libncurses5-dev make cmake
下载mysql ,本文提供一个链接,地址在下方,这个地址是我在七牛云上面上传的,大家可以放心下载。版本为 mysql-5.5.42,也可以官网或者在其它地方下载。
wget -c http://ocwljlzzv.bkt.clouddn.com/soft/mysql-5.5.42.tar.gz
下载完成后,解压,并进入该目录
tar -zxvf mysql-5.5.42.tar.gz
cd mysql-5.5.42
配置一下编译选项,这个类似于 ./configure ,只是在 mysql 5.5 版本以后,都不在使用 ./configure ,而是改为了 cmake 。PREFIX 后面的路径,为mysql 要安装的路径,可以根据自己的实际情况来更改。
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DEXTRA_CHARSETS=all -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_READLINE=1 -DWITH_SSL=bundled -DWITH_ZLIB=system -DWITH_EMBEDDED_SERVER=1 -DENABLED_LOCAL_INFILE=1
如果没有报错,则执行编译。若是有报错,则一般缺少库文件,或是开发环境,装好后,删除 cmake 缓存文件,再重装执行上面的 cmake 命令,即可。没有 error ,执行编译
make
还是一样,没有报错,可以执行 安装,若是报错了,可以在网上查一下报错信息,找对应解决方法,一般都是缺少环境的原因
make install
添加 mysql 用户和组,用户运行 mysql
groupadd mysql
useradd -s /sbin/nologin -M -g mysql mysql
复制 mysql 配置文件,到 /etc/ 目录下
cp support-files/my-medium.cnf /etc/my.cnf
使用 vi 或者 vim 编辑器,打开 /etc/my.cnf,并在 [mysqld] 里面添加一行如一行,指定我们的 datadir (skip-external-locking的上一行)
vim /etc/my.cnf
datadir = /usr/local/mysql/var
启用 innodb ,则把 my.cnf 配置文件里的 innodb 开头的行 的注释,全部去掉,并将 innodb 的两个 home_dir 改为我们的 datadir
vim /etc/my.cnf
innodb_data_home_dir = /usr/local/mysql/var
innodb_data_file_path = ibdata1:10M:autoextend
innodb_log_group_home_dir = /usr/local/mysql/var
innodb_buffer_pool_size = 16M
innodb_additional_mem_pool_size = 2M
innodb_log_file_size = 5M
innodb_log_buffer_size = 8M
innodb_flush_log_at_trx_commit = 1
innodb_lock_wait_timeout = 50
若不想要在默认情况下使用 innodb 引擎,则在 [mysqld] 下添加如下两行: (使用 MyISAM 引擎,或使用其它的,按对应的方法改)。
vim /etc/my.cnf
default-storage-engine=MyISAM
loose-skip-innodb
PS:默认的存储引擎,只有有一个,推荐使用 innodb 或者 MyISAM,两者只能启用一个为默认
初始化系统数据库
/usr/local/mysql/scripts/mysql_install_db --defaults-file=/etc/my.cnf --basedir=/usr/local/mysql --datadir=/usr/local/mysql/var --user=mysql
# 这条命令意思为:指定默认配置文件为 /etc/my.cnf ,指定 basedir 为 /usr/local/mysql,指定 datadir 为 /usr/local/mysql/var,指定运行用户为 mysql 。
更改 mysql 目录的属主及属组,使 mysql 用户对其目录有权限
chown -R mysql.root /usr/local/mysql/var
chgrp -R mysql /usr/local/mysql/.
复制 mysql 启动脚本,到 /etc/init.d/ 目录下
cp support-files/mysql.server /etc/init.d/mysql
添加执行权限
chmod +x /etc/init.d/mysql
添加为开机自动启动
chkconfig --add mysql
chkconfig --level 2345 mysql on
PS:ubuntu Debian 等 linux 使用如下命令添加开机自动启动
update-rc.d -f mysql defaults
添加 mysql 库文件到 系统库文件的搜索库
vim /etc/ls.so.conf.d/mysql.conf
/usr/local/mysql/lib
/usr/local/lib
更新搜索库
ldconfig
启动 mysql 数据库
/etc/init.d/mysql start
查看进程及端口,看是否启动
[root@localhost mysql-5.5.42]# ps -ef | grep mysql
root 13910 1 0 06:55 pts/0 00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/usr/local/mysql/var --pid-file=/usr/local/mysql/var/localhost.localdomain.pid
mysql 14297 13910 0 06:55 pts/0 00:00:00 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/var --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/usr/local/mysql/var/localhost.localdomain.err --pid-file=/usr/local/mysql/var/localhost.localdomain.pid --socket=/tmp/mysql.sock --port=3306
root 14331 1512 0 06:58 pts/0 00:00:00 grep mysql
[root@localhost mysql-5.5.42]#
[root@localhost mysql-5.5.42]# netstat -lnt | grep 3306
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN
[root@localhost mysql-5.5.42]#
可以看到 进程有mysql 的相关进程,mysql 的 3306 端口 已经在监听
设置 mysql root 密码 (默认为空)
/usr/local/mysql/bin/mysqladmin -u root password 'new-password'
优化一下 mysql 权限表,提高部分安全性
/usr/local/mysql/bin/mysql -u root -p
use mysql;
delete from user where password='';
drop database test;
flush privileges;
此操作删除密码为空的用户,在使用 mysqladmin 的时候,只设置了 root 并且主机为 localhost 的 root 用户,默认情况还剩余几个主机为空,密码为空的 root 用户。
若是删错的话了,造成了数据库无法使用,无法启动等原因,先停止 mysql 然后删清空 datadir 目录下的所有文件,并重新初始化 系统表,再更改一下属主和属组,然后启动即可。
补充:每次执行 mysql 相关的命令,都要使用绝对路径,否则会提示命令找不到,有点麻烦,可以把 mysql 的 bin 目录,添加到 PATH 变量中,或者做一个软链接,即可解决。
export PATH=$PATH:/usr/local/mysql/bin
echo 'export PATH=$PATH:/usr/local/mysql/bin' >> /etc/profile