MySQL5.7安装 -- centOS7

285 阅读5分钟

写在前面

本文是看了炼数成金MySQL DBA从小白到大神实战 安装MySQL的视频课程后总结的步骤。

步骤

关闭防火墙

CentOS 7 默认使用的是firewall作为防火墙,使用iptables必须重新设置(yum install iptables-services) firewall关闭:

  • systemctl stop firewalld.service #停止firewall
  • systemctl disable firewalld.service #禁止firewall开机启动

iptable关闭:

  • vi /etc/sysconfig/iptables
  • -A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT(在iptables中新增这一行)
  • systemctl restart iptables.service(重启防火墙使配置生效)/systemctl enable iptables.service(设置防火墙开机启动)

关闭selinux:

  • 在 /etc/selinux/config中 把SELINUX=enforcing改为SELINUX=disabled

配置sysctl.conf

检查操作系统上是否安装了MySQL

检测系统是否自带安装mysql:

yum list installed | grep mysql 

删除系统自带的mysql及其依赖

yum -y remove mysql*

解压mysql5.7,安装cmake,编译并安装

-- 这一环节需要用root用户在解压目录下操作(/u01/mysql5.7-7.12/),后面环节就用mysql用户在安装目录下操作(/u01/my3306/)

新建文件夹:

mkdir -p /u01/my3306/data
mkdir -p /u01/my3306/run
mkdir -p /u01/my3306/tmp
mkdir -p /u01/my3306/log/iblog
mkdir -p /u01/my3306/log/binlog

获取安装MySQL需要的包:

yum install -y autoconf automake zlib libxml libgcrypt libtool ncurses-develncurses libaio bison gcc gcc-c++ openssl-devel

安装包的有关描述:

header 1 header 2
必备的包和工具 ----------
gcc/g++ MySQL 5.6开始,需要使用g++进行编译
cmake MySQL 5.5开始,使用cmake进行工程管理,cmake需要2.8以上版本
bison MySQL语法解析器需要使用bison进行编译
ncurses-devel 用于终端操作的开发包
zlib MySQL使用zlib进行压缩
功能需要的包 ----------------
libxml 用于XML输入输出方式的支持
openssl 使用openssl安全套接字方式通信
dtrace 用于诊断MySQL问题。
有关MySQL编译参数 ------------
CMAKE_BUILD_TYPE 编译的版本类型RelWithDebInfo和Debug,不同之处是RelWithDebInfo会进行优化
CMAKE_INSTALL_PREFIX 指定make install安装的目标路径
SYSCONFDIR 指定配置文件的默认路径
MYSQL_DATADIR 指定data目录的默认路径
WITH_DEBUG 指定是否有debugging信息,一般用于源码调试时,打开WITH_DEBUG,生产环境关闭
ENABLED_PROFILING 指定是否可以使用show profile显示操作执行的详细信息
DEFAULT_CHARSET 指定默认字符集,可以在启动的配置文件中指定。
DEFAULT_COLLATION 指定默认字符比较、排序的规则
WITH_EXTRA_CHARSETS 指定其他可能使用的字符集
WITH_SSL 指定SSL的类型,从5.6.6开始默认bundled类型,此外也可以指定SSL库的路径地址
WITH_ZLIB 指定zlib的类型,用于压缩功能
ENABLED_LOCAL_INFILE 指定是否允许使用load data infile功能
WITH_EMBEDDED_SERVER 指定是否编译libmysqld嵌入式库
INSTALL_LAYOUT 指定安装的布局类型
WITH_storage_STORAGE_ENGINE 指定编译支持的存储引擎,默认支持MyISAM,MERGE,MEMORY,CSV存储引擎
更多详细参数可参考 dev.mysql.com/doc/refman/…

cmake:

cmake \
-DCMAKE_INSTALL_PREFIX=/u01/my3306 \
-DINSTALL_DATADIR=/u01/my3306/data  \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DEXTRA_CHARSETS=all \
-DWITH_SSL=yes \
-DWITH_EMBEDDED_SERVER=1 \
-DENABLED_LOCAL_INFILE=1 \
-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_PARTITION_STORAGE_ENGINE=1 \
-DMYSQL_UNIX_ADDR=/u01/my3306/run/mysql.sock \
-DMYSQL_TCP_PORT=3306 \
-DENABLED_LOCAL_INFILE=1 \
-DSYSCONFDIR=/etc \
-DWITH_READLINE=on \
-DDOWNLOAD_BOOST=1 -DWITH_BOOST=/usr/local/boost1.59/boost_1_59_0 

cmake -> make -> make install

给mysql用户授权:

chown -R mysql:mysql /u01/my3306
chmod 777(或者755) /u01/my3306

初始化MySQL脚本

mysqld --defauts-file=/u01/my3306/my.cnf --datadir=xxx --initialize-insecure --user=xxx --console

启动MySQL

./bin/mysqld_safe --defauts-file=/u01/my3306/my.cnf --user=mysql

登录MySQL并修改root用户密码

登录      ---  mysql -u root -p
修改密码  ---  ALTER USER 'root'@'localhost' IDENTIFED BY 'new_pwd'

MySQL配置文件

[client]
port=3306
socket=/u01/my3306/run/mysql.sock

[mysql]
pid_file=/u01/my3306/run/mysqld.pid

[mysqld]
autocommit=1
general_log=off
explicit_defaults_for_timestamp=true

# system
basedir=/u01/my3306
datadir=/u01/my3306/data
max_allowed_packet=1g
max_connections=3000
max_user_connections=2800
open_files_limit=65535
pid_file=/u01/my3306/run/mysqld.pid
port=3306
server_id=101
skip_name_resolve=ON
socket=/u01/my3306/run/mysql.sock
tmpdir=/u01/my3306/tmp

#binlog
log_bin=/u01/my3306/log/binlog/binlog
binlog_cache_size=32768
binlog_format=row
expire_logs_days=7
log_slave_updates=ON
max_binlog_cache_size=2147483648
max_binlog_size=524288000
sync_binlog=100

#logging
log_error=/u01/my3306/log/error.log
slow_query_log_file=/u01/my3306/log/slow.log
log_queries_not_using_indexes=0
slow_query_log=1
log_slave_updates=ON
log_slow_admin_statements=1
long_query_time=1

#relay
relay_log=/u01/my3306/log/relaylog
relay_log_index=/u01/my3306/log/relay.index
relay_log_info_file=/u01/my3306/log/relay-log.info

#slave
slave_load_tmpdir=/u01/my3306/tmp
slave_skip_errors=OFF

#innodb
innodb_data_home_dir=/u01/my3306/log/iblog
innodb_log_group_home_dir=/u01/my3306/log/iblog
innodb_adaptive_flushing=ON
innodb_adaptive_hash_index=ON
innodb_autoinc_lock_mode=1
innodb_buffer_pool_instances=8

#default
innodb_change_buffering=inserts
innodb_checksums=ON
innodb_buffer_pool_size= 128M
innodb_data_file_path=ibdata1:32M;ibdata2:16M:autoextend
innodb_doublewrite=ON
innodb_file_format=Barracuda
innodb_file_per_table=ON
innodb_flush_log_at_trx_commit=1
innodb_flush_method=O_DIRECT
innodb_io_capacity=1000
innodb_lock_wait_timeout=10
innodb_log_buffer_size=67108864
innodb_log_file_size=1048576000
innodb_log_files_in_group=4
innodb_max_dirty_pages_pct=60
innodb_open_files=60000
innodb_purge_threads=1
innodb_read_io_threads=4
innodb_stats_on_metadata=OFF
innodb_support_xa=ON
innodb_use_native_aio=OFF
innodb_write_io_threads=10

[mysqld_safe]
datadir=/u01/my3306/data

安装遇到问题

  1. MySQL初始化没有成功
error:
Table 'mysql.plugin' doesn't exist
[ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.

确认前面步骤无误之后,重新初始化 2. 无法找到mysql.sock文件

mysql ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/u01/my3306/mysql.sock' (2)

这个是因为我安装的时候,cmake的时候配了这样的参数

-DMYSQL_UNIX_ADDR=/u01/my3306/run/mysql.sock

然后在my.cnf上,我又是这样写的

socket=/u01/my3306/mysql.sock

解决办法 可以建立一个软链接:

ln -s /u01/my3306/run/mysql.sock /u01/my3306/mysql.sock
  1. 数据库安装好之后无法登录
mysql ERROR 1045 (28000): Access denied for user 'mysql'@'localhost' (using password: NO)

出现这个错误的原因是,MySQL中没有mysql这个用户(Linux上使用的mysql用户,就会默认使用mysql用户登录MySQL) 这时候应该使用账号登录 mysql -u root -p 如果初始化的时候用的 initialize-insecure 就登录就不需要密码 如果初始化的时候没有用insecure,就需要去error.log中找到root用户密码,密码在root@localhost后面

  1. 授权出错:
create user 'user_name'@'address' identified by password';
flush privileges;
grant select on *.* to 'user_name'@'address' identified by 'password'; 

出错原因没有找到,不过进入到mysql这个库里面再执行这个授权命令就成功了