## 源码 编译安装 Mysql 以 mysql-5.7.15.tar.gz 为例
安装中涉及的几点需要提前说明的问题:
所有下载的文件将保存在 /root 目录下
mysql 将以 mysql 用户运行,而且将加入 service 开机自动运行
mysql 将被安装在 /usr/local/mysql/ 目录下
mysql 默认安装使用 utf8 字符集
mysql 的数据和日志文件保存在 /usr/local/mysql/data/ 目录下
mysql 的配置文件保存于/usr/local/mysql/etc/my.cnf
注意从 MySQL 5.7.5 开始 Boost 库是必需的
安装依赖包
yum -y install gcc-c++ ncurses-devel cmake make perl gcc autoconf automake zlib libxml libgcrypt libtool bison
、、、安装依赖库
、、安装 cmake 和 bison
yum install -y cmake bison ncurses
、、下载 Boost
wget http://ncu.dl.sourceforge.net/project/boost/boost/1.59.0/boost_1_59_0.tar.gz
、、解压
tar zxf boost_1_59_0.tar.gz
、、移动
mv boost_1_59_0 /usr/local/boost
##建立 mysql 安装目录和用户,
mkdir -pv /usr/local/mysql
、、、在/usr/local/mysql 建立【data】、【tmp】、【log】、【etc】4 个目录
cd /usr/local/mysql
mkdir data tmp log etc
、、建立组和用户
groupadd mysql
useradd -g mysql -s /usr/sbin/nologin mysql
、、、下载 mysql
cd ~
wget http://mirrors.sohu.com/mysql/MySQL-5.7/mysql-5.7.16.tar.gz
、、、解压并进入目录
tar zxf mysql-5.7.16.tar.gz
cd mysql-5.7.16
、、、编写一个辅助 shell 文件,帮我们配置 mysql
vim mysql_install.sh
、、、以下内容都写在一行上,不要换行
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_UNIX_ADDR=/usr/local/mysql/tmp/mysql.sock -DMYSQL_DATADIR=/usr/local/mysql/data -DSYSCONFDIR=/usr/local/mysql/etc -DMYSQL_USER=mysql -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_EXTRA_CHARSETS:STRING=utf8,gbk -DWITH_DEBUG=0 -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DENABLED_LOCAL_INFILE=1 -DWITH_EMBEDDED_SERVER=1 -DMYSQL_USER=mysql -DMYSQL_TCP_PORT=3306 -DWITH_BOOST=/usr/local/boost
、、、把刚刚的 shell 文件加上可执行权限:
chmod +x ./mysql_install.sh
、、、执行 shell 文件进行软件的配置和环境检测
./mysql_install.sh
、、、编译软件并且进行安装
make && make install
出错停止。。。。。。
另外如果过程中出现报错而中断,需
要删除 CMakeCache.txt 文件后再执行 mysql_install.sh 文件(没出错请不要执行以
下两行指令!!!!):
make clean
rm -f CMakeCache.txt 或者 shell># unlink CMakeCache.tx
##############################配置########################
。。。。使用递归,把 mysql 目录所有者设置为 mysql 这个用户:
chown -R mysql:mysql /usr/local/mysql
。。。。如果 /etc/my.cnf 存在的话,请删除
unlink /etc/my.cnf
。。。。进入 MySQL 安装目录下
cd /usr/local/mysql
。。。。重建 my.cnf 文件
cp support-files/my-default.cnf etc/my.cnf
。。。。根据实际情况优化 mysql 配置
vim etc/my.cnf
比如将 my.cnf 的内容改成以下:
[client]
default-character-set = utf8
port = 3306
socket = /usr/local/mysql/tmp/mysql.sock
[mysqld]
datadir =/usr/local/mysql/data
port = 3306
socket = /usr/local/mysql/tmp/mysql.sock
user = mysql
symbolic-links = 0
pid-file = /usr/local/mysql/tmp/mysql.pid
explicit_defaults_for_timestamp = true
sql_mode = ERROR_FOR_DIVISION_BY_ZERO,NO_ZERO_DATE,NO_ZERO_IN_DATE,NO_AUTO_CREATE_USER
slow_query_log = on
slow_query_log_file = /usr/local/mysql/log/slow.log
long_query_time = 2
log_error = /usr/local/mysql/log/mysql.err
第 四 步:
。。。。 初始化 mysql 的基本表
。。5.7 以前的做法:
/usr/local/mysql/scripts/mysql_install_db --defaults-file=/usr/local/mysql/my.cnf --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --user=mysql
。。。。5.7 及以上的做法:
;;;;--initialize 会生成一个随机密码(~/.mysql_secret),而--initialize-insecure 不会生成密码
/usr/local/mysql/bin/mysqld --initialize-insecure --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --user=mysql
。。。。启动 mysql
/usr/local/mysql/bin/mysqld_safe > /dev/null 2>&1 &
。。。。修改 mysql 的 root 密码
/usr/local/mysql/bin/mysqladmin -u root password 密码
。。。。增加到开机启动
;;;;先将 mysqld 设置为服务
cp /usr/local/mysql/support-files/mysql.server /etc/rc.d/init.d/mysqld
。。。。然后将 mysqld 服务加入启动项:
chkconfig --add mysqld
。。。。设置为自启动:
chkconfig --level 345 mysqld on
。。。。将 mysql 命令加入到环境变量里
PATH=$PATH:/usr/local/mysql/bin
。。。。为了重启后仍能有效:
echo ‘PATH=$PATH:/usr/local/mysql/bin‘ >> /root/.bashrc
。。。。如果需要对外开放 3306 端口
iptables -I INPUT -p tcp --dport 3306 -j ACCEPT
。。。。如果 mysqld 服务正常运行中,但是执行 mysql 指令时报出以下错误
::error 2202 (HY000):can‘t connent ....
解决方案就是创建一个软链接
mkdir -pv /var/lib/mysql
ln -s /usr/local/mysql/tmp/mysql.sock /var/lib/mysql/mysql.sock
弄了好几天,整理出来的。 有错误的地方欢迎指正。。。