潇湘夜雨移动版

主页 > 数据库 >

mysql5.7编译安装

1.环境和软件准备
下载mysql源码包
注意:官方现在提供mysql-5.7.16.tar.gz和mysql-boost-5.7.16.tar.gz两个包,建议下载后者,因为
 改版本包含了mysql-5.7需要的boost库文件,不用再单独下载boots库。
[root@hadoop-master ~]# wget http://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-boost-5.7.16.tar.gz
2.安装MySQL
1>创建数据库用户
 groupadd mysql
 useradd -g mysql -s /sbin/nologin mysql #非登录用户
2>建立mysql安装目录及数据存放目录 
 mkdir /usr/local/mysql   #在本机安装可不用创建该目录,make install时会自动创建
 mkdir -p /data/mysql  
chown mysql:mysql -R /data/mysql/
3>解决依赖关系
 yum install cmake
 yum install ncurses-devel
 yum install bison
 yum install git openssl-devel
 yum -y install gcc gcc-c++ ncurses ncurses-devel cmake bison git openssl-devel
4>编译安装
tar -zxvf mysql-boost-5.7.16.tar.gz 
[root@hadoop-master ~]# cd mysql-5.7.16
# cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/data/mysql \
-DMYSQL_TCP_PORT=3306 \
-DSYSCONFDIR=/etc \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_READLINE=1 \
-DWITH_LIBWRAP=0 \
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock \
-DWITH_SSL=system \
-DWITH_ZLIB=system \
-DWITH_BOOST=./boost/boost_1_59_0 \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DEXTRA_CHARSETS=all \
-DENABLED_LOCAL_INFILE=1 \
-DENABLE_DTRACE=0 \
-DWITH_EMBEDDED_SERVER=1
make
make install
 cp support-files/my-medium.cnf /etc/my.cnf
 /etc/my.cnf,仅供参考 
[client]
port = 3306
socket = /tmp/mysql.sock
default-character-set = utf8
[mysqld]
port = 3306
socket = /tmp/mysql.sock
basedir = /usr/local/mysql
datadir = /data/mysql
pid-file = /data/mysql/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 = 0
query_cache_size = 0
#query_cache_limit = 2M
ft_min_word_len = 4
log_bin = mysql-bin
#binlog_format = mixed
expire_logs_days = 30
log_error = /data/mysql/mysql-error.log
slow_query_log = 1
long_query_time = 1
slow_query_log_file = /data/mysql/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
 
5>数据库初始化
/usr/local/mysql/bin/mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql
注:
之前版本mysql_install_db是在mysql_basedir/script下,5.7放在了mysql_install_db/bin目录下,且已被废弃
“–initialize”会生成一个随机密码(~/.mysql_secret),而”–initialize-insecure”不会生成密码
–datadir目标目录下不能有数据文件
 
6>添加系统启动脚本
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql
chmod +x /etc/init.d/mysql
 chkconfig --add mysql
 chkconfig mysql on
 启动数据库:service mysql start
 
7>添加环境
 echo 'PATH=/usr/local/mysql/bin:$PATH export PATH' >>/etc/profile
 source /etc/profile
 
8>删除匿名用户和设置用户密码
mysql -u root -p
mysql> select User,Host,Password from mysql.user;
mysql> delete from mysql.user where user='' && password='';
mysql> set password for 'root'@'localhost'=password('123456');
mysql> flush privileges;
mysql> select User,Host,authentication_string from mysql.user;
+-----------+-----------+-------------------------------------------+
| User      | Host      | authentication_string                     |
+-----------+-----------+-------------------------------------------+
| root      | localhost | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| mysql.sys | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
+-----------+-----------+-------------------------------------------+
mysql5.7增加了sys 系统数据库,通过这个库可以快速的了解系统的元数据信息
这个库确实可以方便DBA发现数据库的很多信息,解决性能瓶颈都提供了巨大帮助
 
9>忘记root密码重置
关闭正在运行的 MySQL :
[root@localhost~]# service mysql stop 
运行
[root@localhost~]# mysqld_safe --skip-grant-tables & 
为了安全可以这样禁止远程连接:
[root@localhost~]# mysqld_safe --skip-grant-tables --skip-networking & 
使用mysql连接server:
[root@localhost~]# mysql -p 
更改密码:
mysql> update mysql.user set authentication_string=password('123qwe') where user='root' and Host = 'localhost'; 
*特别提醒注意的一点是,新版的mysql数据库下的user表中已经没有Password字段了
而是将加密后的用户密码存储于authentication_string字段
mysql> flush privileges; mysql> quit; 
修改完毕。重启
[root@localhost ~]# service mysql restart 
然后mysql就可以连接了
但此时操作似乎功能不完全,还要alter user…
mysql> alter user 'root'@'localhost' identified by '123'; 
这样也可以:
mysql> set password for 'root'@'localhost'=password('123'); 
 
10>密码策略设置
密码策略设置方法:
决定是否使用该插件(及强制/永久强制使用)
--validate-password=ON/OFF/FORCE/FORCE_PLUS_PERMANENT
注意:5.7.15版本默认禁用该插件
查看当前密码策略
mysql> SHOW VARIABLES LIKE 'validate_password%';
+--------------------------------------+--------+
| Variable_name                        | Value  |
+--------------------------------------+--------+
| validate_password_dictionary_file    |        |
| validate_password_length             | 8      |
| validate_password_mixed_case_count   | 1      |
| validate_password_number_count       | 1      |
| validate_password_policy             | MEDIUM |
| validate_password_special_char_count | 1      |
+--------------------------------------+--------+
通过  SET GLOBAL  validate_password_policy='LOW';  命令,降低安全等级后,就可以直接使用,限制是必须8个字符以上;
 
关于安全等级更详细的介绍如下
LOW 政策只测试密码长度。 密码必须至少有8个字符长。
MEDIUM 政策的条件 密码必须包含至少1数字字符,1 大写和小写字符,和1特别 (nonalphanumeric)字符。
STRONG 政策的情况 密码子字符串长度为4的或更长时间不能匹配 单词在字典文件中,如果一个人被指定。
 
密码失效设置
最后,为了解决密码失效的问题, 最后在配置文件的[mysqld]字段下,增加以下字段
[mysqld]
default_password_lifetime=0
也可以通过命令行进行设置
ALTER USER 'script'@'localhost' PASSWORD EXPIRE NEVER
注意:在5.7.10版本后密码策略和过期时间默认都是关闭了的。
 
扩展:
主从同步http://blog.csdn.net/zhengwei125/article/details/52471341
多线程复制http://blog.csdn.net/u011871037/article/details/52232677
binlog-do-db=moto 同步的数据库为moto
binlog-ignore-db=mysql 不同步 mysql
 
mysql5.6开始支持多线程方式传输二进制日志
只能工作在GTIDs 模式下
只有对不同的库执行的操作才能采用多线程传输。同一个库不同表的操作只能单独用单进程传输。 
my.cnf
[mysqld]
slave-parallel-workers=N   默认是0 表示不开启 线程数
N 根据CPU的核数来决定,几核就写几,和数据库的数量一一对应,几个库就是几个线程来传输二进制日志 ,qps上万的话,多线程传输会有很明显的性能提升
MySQL 5.7 GA版本推出的 Enhanced Multi-threaded Slaves功能,彻底解决了之前版本主备数据复制延迟的问题,开启该功能参数如下:
 
1.  # slave机器
 
2.  slave-parallel-type=LOGICAL_CLOCK
 
3.  #slave-parallel-type=DATABASE #兼容MySQL 5.6基于schema级别的并发复制
 
4.  slave-parallel-workers=16 #开启多线程复制
 
5.  master_info_repository=TABLE  #主从同步的master信息写入到mysql.slave_master_info表中
 
6.  relay_log_info_repository=TABLE  #主从同步的中继日志写入到mysql.slave_relay_log_info表中
 
7.  relay_log_recovery=ON  #开启中继日志自动恢复功能
 
(责任编辑:liangzh)