centos6.9编译安装mysql-5.7.20
2017-12-17 本文已影响70人
马儿爱吃草
查看系统是否有默认mysql软件
rpm -qa|grep mysql
有的话先卸载mysql
rpm -e mysql-libs-5.1.73-8.el6_8.x86_64 --nodeps
创建一个组
groupadd mysql
创建一个用户,不允许登陆和不创主目录
useradd -s /sbin/nologin -g mysql -M mysql
创建目录
mkdir -p /usr/local/mysql
mkdir -p /www/data/mysql/data
mkdir -p /www/data/mysql/logs
mkdir -p /www/data/mysql/pids
MySQL从5.5版本开始,通过./configure进行编译配置方式已经被取消,取而代之的是cmake工具。
安装依赖
yum -y install gcc gcc-c++ ncurses ncurses-devel cmake
下载mysql-boost-5.7.20,带boost版
cd /usr/local/src
wget https://cdn.mysql.com//Downloads/MySQL-5.7/mysql-boost-5.7.20.tar.gz
解压
tar zxvf mysql-boost-5.7.20.tar.gz
cd mysql-5.7.20
为了避免安装过程内存不足,导致安装失败,需要临时使用文件作为Swap分区来解决
# 创建要作为swap分区的文件:增加1GB大小的交换分区,则命令写法如下,其中的count等于想要的块的数量(bs*count=文件大小)
dd if=/dev/zero of=/tmp/swapfile bs=1M count=1024
# 格式化为交换分区文件,建立swap的文件系统
mkswap /tmp/swapfile
# 启用交换分区文件,启用swap文件
swapon /tmp/swapfile
进去解压的目录
cd /usr/local/src/mysql-5.7.20
使用cmake命令进行编译
cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/www/data/mysql/data \
-DMYSQL_UNIX_ADDR=/www/data/mysql/data/mysql.sock \
-DMYSQL_TCP_PORT=3306 \
-DSYSCONFDIR=/etc \
-DMYSQL_USER=mysql \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_FEDERATED_STORAGE_ENGINE=1 \
-DWITH_MEMORY_STORAGE_ENGINE=1 \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_EMBEDDED_SERVER=1 \
-DWITH_EDITLINE=bundled \
-DWITH_READLINE=1 \
-DENABLE_DOWNLOADS=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DEXTRA_CHARSETS=all \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_DEBUG=0 \
-DENABLE_DTRACE=0 \
-DMYSQL_MAINTAINER_MODE=0 \
-DWITH_SSL:STRING=bundled \
-DWITH_ZLIB:STRING=bundled \
-DDOWNLOAD_BOOST=1 \
-DWITH_BOOST=./boost
检查完不报错之后,再执行
make
这里等待的时间非常久!!!!!
如果有报错,需要执行清理,没报错就忽略(注意)
make clean
rm -rf CMakeCache.txt
make完成
[100%] Built target my_safe_process
安装
make install
编译完成之后,关掉Swap分区
swapoff /tmp/swapfile
rm /tmp/swapfile
编辑配置文件
vim /etc/my.cnf
配置内容
[client]
port = 3306
socket = /www/data/mysql/data/mysql.sock
default-character-set = utf8
[mysqld]
port = 3306
socket = /www/data/mysql/data/mysql.sock
basedir = /usr/local/mysql
datadir = /www/data/mysql/data
pid-file = /www/data/mysql/pids/mysql.pid
user = mysql
bind-address = 0.0.0.0
server-id = 1
init-connect = 'SET NAMES utf8'
character-set-server = utf8
#skip-name-resolve
#skip-networking
back_log = 300
max_connections = 1000
max_connect_errors = 6000
open_files_limit = 65535
table_open_cache = 128
max_allowed_packet = 4M
binlog_cache_size = 1M
max_heap_table_size = 8M
tmp_table_size = 16M
read_buffer_size = 2M
read_rnd_buffer_size = 8M
sort_buffer_size = 8M
join_buffer_size = 8M
key_buffer_size = 4M
thread_cache_size = 8
query_cache_type = 1
query_cache_size = 8M
query_cache_limit = 2M
ft_min_word_len = 4
log_bin = mysql-bin
binlog_format = mixed
expire_logs_days = 30
log_error = /www/data/mysql/logs/mysql-error.log
slow_query_log = 1
long_query_time = 1
slow_query_log_file = /www/data/mysql/logs/mysql-slow.log
performance_schema = 0
explicit_defaults_for_timestamp
#lower_case_table_names = 1
skip-external-locking
default_storage_engine = InnoDB
#default-storage-engine = MyISAM
innodb_file_per_table = 1
innodb_open_files = 500
innodb_buffer_pool_size = 64M
innodb_write_io_threads = 4
innodb_read_io_threads = 4
innodb_thread_concurrency = 0
innodb_purge_threads = 1
innodb_flush_log_at_trx_commit = 2
innodb_log_buffer_size = 2M
innodb_log_file_size = 32M
innodb_log_files_in_group = 3
innodb_max_dirty_pages_pct = 90
innodb_lock_wait_timeout = 120
bulk_insert_buffer_size = 8M
myisam_sort_buffer_size = 8M
myisam_max_sort_file_size = 10G
myisam_repair_threads = 1
interactive_timeout = 28800
wait_timeout = 28800
[mysqldump]
quick
max_allowed_packet = 16M
[myisamchk]
key_buffer_size = 8M
sort_buffer_size = 8M
read_buffer = 4M
write_buffer = 4M
将mysql添加到环境变量
vim ~/.bash_profile
修改文件中 PATH 一行,将/usr/local/mysql/bin
和 /usr/local/mysql/lib
加入到 PATH=$PATH:$HOME/bin
一行之后(注意以冒号分隔),如下
PATH=$PATH:$HOME/bin:/usr/local/php/bin:/usr/local/mysql/bin:/usr/local/mysql/lib
更新配置文件
source /etc/profile
环境变量
echo $PATH
# 如下
# /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/php/bin
启动mysql服务
# 将mysql服务文件拷贝到/etc/init.d/目录,并给出执行权限
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
# 开机自动启动
chmod +x /etc/init.d/mysqld
chkconfig --add mysqld
chkconfig mysqld on
查看是否设置成功
chkconfig --list | grep mysqld
创建日志文件
touch /www/data/mysql/logs/mysql-error.log
touch /www/data/mysql/logs/mysql-slow.log
touch /www/data/mysql/pids/mysql.pid
更改目录权限
chown -R mysql:mysql /www/data/mysql
初始化数据库
注:
"–initialize"已废弃,生成一个随机密码(~/.mysql_secret)
"--initialize-insecure "不会生成密码
"–datadir"目录下不能有数据文件
查看下mysqld 状态
service mysqld status
删掉限制文件
rm /var/lock/subsys/mysql
删掉data文件
rm -rf /www/data/mysql/data
mkdir -p /www/data/mysql/data
chown -R mysql:mysql /www/data/mysql
初始化数据库
/usr/local/mysql/bin/mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/www/data/mysql/data
如果初始化发生错误,需要执行这些清理(注意)
rm -rf /www/data/mysql/data
mkdir -p /www/data/mysql/data
chown -R mysql:mysql /www/data/mysql
启动MySQL
service mysqld start
# Starting MySQL. [ OK ]
查看MySQL服务进程和端口
netstat -pantu | grep 3306
ps -elf | grep mysqld
mysql的其他命令
service mysqld start
service mysqld restart
service mysqld status
service mysqld stop
更改用户密码
# 连接MySQL
mysql -u root
# 查看数据库
mysql> show databases;
# 进入mysql库,查看用户表信息
mysql> use mysql
mysql> select host,user,authentication_string from user;
# 设置密码(推荐),注意此方法必须使用flush privileges命令刷新一下权限才能生效
mysql> UPDATE user SET authentication_string=PASSWORD('abc123456') WHERE user='root';
# 刷新一下权限
mysql> flush privileges;
# 退出
mysql> quit
重新连接测试
mysql -u root -p
# 输入刚才设置的密码回车即可,如下
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 6
Server version: 5.7.20-log Source distribution
Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>