mysql5.7的安装和mysql5.6的安装变化蛮大的.我一开始按照官方文档的说明安装的,根本不行,不得不吐槽一下mysql的官方安装文档很差,和mongodb的没法比.
注意:在使用二进制包安装mysql的时候,确保你的系统上没有以前的使用yum或者rpm安装的旧的mysql,如果存在,使用rpm -e命令来删除.包括删除/etc/my.cnf
下面是安装步骤:
1.创建mysql用户和组
groupadd mysql
useradd -r -g mysql -s /bin/false mysql
2.解压缩安装包
tar zxvf mysql-5.7.14-linux-glibc2.5-x86_64.tar.gz -C /usr/local/
cd /usr/local
ln -sv mysql-5.7.14-linux-glibc2.5-x86_64 mysql
3.创建数据文件目录并且赋权
cd /usr/local/mysql
chown -R mysql.mysql *
这里我将mysql数据文件放在/data/mysql/data下
mkdir -p /data/mysql/data
chown -R mysql:mysql /data/mysql/data
4.创建mysql配置文件
这里我直接拷贝了以前使用的my.cnf,其中有些参数已经被遗弃.数据目录,日志目录根据现实环境修改:
vi /etc/my.conf
[mysqld]
###################BASIC#################
port = 3306
user = mysql
socket = /data/mysql/data/mysql.sock
pid-file = /data/mysql/data/mysql.pid
basedir = /usr/local/mysql
datadir = /data/mysql/data
#skip-name-resolve
#skip-grant-tables
skip-external-locking
character-set-server=utf8
default-storage-engine = innodb
lower_case_table_names=1
##################CONNECT#################
max_connections = 2000
max_connect_errors = 1000000
interactive_timeout = 28800
wait_timeout = 28800
connect_timeout = 20
back_log = 500
#FOR FAST CREATE THREAD
thread_cache_size = 300
open_files_limit = 10240
table_open_cache = 3000
###############THREAD BUFFER##############
###############FOR EVERY THREAD###########
sort_buffer_size = 1M
join_buffer_size = 1M
read_buffer_size = 1M
read_rnd_buffer_size = 1M
#net_buffer_length = 16k
tmp_table_size = 64M
max_allowed_packet = 128M
#FOR MEMORY ENGINE
max_heap_table_size = 64M
#################BUFFER##################
###############FOR ALL THREAD############
query_cache_type = 0
query_cache_size = 32M
query_cache_limit = 1M
#################LOG BUFFER#############
binlog_cache_size = 16M
max_binlog_cache_size = 32M
binlog_stmt_cache_size = 32M
#################LOG FILE###############
sync_binlog = 0
binlog_format = row
log-error = /data/mysql/log/mysql-err.log
log-bin = /data/mysql/log/master-bin
max_binlog_size = 512M
relay-log = /data/mysql/log/relay-bin
log_output = file
slow_query_log = 1
slow_query_log_file = /data/mysql/log/slow_query.log
long_query_time=10
general_log = 0
general_log_file = /data/mysql/log/general_query_log
expire-logs-days = 3
###############INNODB##################
#innodb_page_size = 16k
innodb_file_per_table = 1
#innodb_data_file_path = ibdata1:12M:autoextend
#innodb_log_file_size = 512M
#innodb_log_files_in_group = 3
#innodb_buffer_pool_size = 500M
#innodb_buffer_pool_instance=8
innodb_log_buffer_size = 8m
innodb_max_dirty_pages_pct = 90
innodb_thread_concurrency = 0
innodb_flush_method = O_DIRECT
innodb_flush_log_at_trx_commit = 0
innodb_lock_wait_timeout = 100
innodb_fast_shutdown = 1
innodb_read_io_threads = 8
innodb_write_io_threads = 8
innodb_io_capacity = 1000
innodb_use_native_aio = 1
innodb_stats_on_metadata = 0
innodb_strict_mode = 1
innodb_file_format = barracuda
innodb_file_format_max = barracuda
innodb_file_format_check = 1
###############MYISAM###################
key_buffer_size = 64M
key_cache_block_size = 64k
myisam_sort_buffer_size = 64M
#################REPLICATE###############
server_id =1
log_slave_updates=1
#binlog-do-db = brent
#binlog-ignore-db = mysql
#replicate_ignore_db=mysql
#replicate_do_table=brent.t1
#replicate_ignore_table=brent.t2
#######GTID#######
#gtid-mode = on
#enforce-gtid-consistency = true
#master-info-repository=TABLE
#master-info-repository=TABLE
#relay-log-info-repository=TABLE
#sync-master-info=1
#slave-parallel-workers=2
#binlog-checksum=CRC32
#master-verify-checksum=1
#slave-sql-verify-checksum=1
#binlog-rows-query-log_events=1
#report-port=3306
#report-host=localip
sql_mode = NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
[mysqld_safe]
err-log = /data/mysql/log/mysqld_safe.log
pid-file = /data/mysql/data/mysql.pid
[mysql]
no-auto_rehash
default_character-set = gbk
[client]
port = 3306
socket = /data/mysql/data/mysql.sock
5.初始化mysql
在5.6初始化使用scripts/mysql_install_db来实现,而5.7.6以后的版本则使用bin/mysqld --initialize来实现
根据上面的my.conf来初始化:
- cd /usr/lcoal/mysql
bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql/data --pid-file=/data/mysql/data/mysql.pid
chown -R root .
6.将mysql设置为服务
cp support-files/mysql.server /etc/init.d/mysqld
chkconfig --add mysqld
chkconfig --level 35 mysqld on
7.启动连接mysql
这时你就可以启动mysql了
service mysqld start
5.7以后root密码写在/root/.mysql_secret下
cat /root/.mysql_secret
mysql -uroot -p
Enter password:
8.其他
我这里安装完成之后使用.mysql_secret的密码总是报错密码错误.解决办法是,
先在my.cnf中添加skip-grant-tables参数来跳过授权表
然后启动数据库.再执行下面的语句:
mysql> flush privileges;
Query OK, 0 rows affected (0.32 sec)
mysql> set password for root@'localhost'=password('root');
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
mysql5.7的mysql.user中不再存放passwod列,因此不能直接update了.