MYSQL5.6和5.7编译标准化安装与配置
文档结构图如下:
一、前期规划
1、软件环境以及说明
操作系统:RedHat Linux 6.7 64位
数 据 库:MYSQL5.6.38/5.7.20
MySQL 5.6:初始化数据时需要进到家目录的 script 目录下
执行:
/usr/local/mysql/scripts/mysql_install_db --basedir=/usr/local/mysql/ --datadir=/data/mysql --defaults-file=/etc/my3306.cnf --user=mysql
我的环境执行如下:
./mysql_install_db --basedir=/usr/local/mysql5.6 --datadir=/mydata/mysql/mysql3306/data --defaults-file=/etc/my3306.cnf --user=mysql
此时数据库密码为空。
MySQL 5.7:初始化数据时需要进到家目录的 bin 目录下
执行:
/usr/local/mysql/bin/mysqld --user=mysql --datadir=/data/mysql --basedir=/usr/local/mysql/ --initialize
已然已经废弃了使用 mysql_install_db 这个命令进行初始化数据的操作了。
我的环境执行如下:
/usr/local/mysql5.7/bin/mysqld --defaults-file=/etc/my3307.cnf --basedir=/usr/local/mysql5.7 --datadir=/mydata/mysql/mysql3307/data/ --user=mysql --initialize
注:--initialize 会自动生成密码在 error log 里面。如果加 --initialize-insecure 密码为空
二、安装数据库前准备
1、Selinux和系统防火墙iptables 需要关闭
service iptables stop
chkconfig iptables off
vi /etc/sysconfig/selinux
setenforce 0
查看IPTABLES 当前状态与关闭过程
chkconfig --list|grep iptables
也可以根据需要开放端口。
2、关闭sendmail服务
先查看是否安装sendmail的相关组件。
rpm -qa | grep sendmail
如果已安装sendmail插件:
service sendmail stop
service sendmail stop
chkconfig sendmail off
3、修改IO调度
查看IO 调度文件:
cat /sys/block/sda/queue/scheduler
修改I/O调度器;需要在 /etc/grub.conf 加入elevator=deadline,保证永久有效。
Deadline(截止时间调度程序)
特点:
通过时间以及硬盘区域进行分类,这个分类和合并要求类似于noop的调度程序.
Deadline确保了在一个截止时间内服务请求,这个截止时间是可调整的,而默认读期限短于写期限.这样就防止了写操作因为不能被读取而饿死的现象.
Deadline对数据库环境(ORACLE RAC,MYSQL等)是最好的选择.
4、SWAP分区的设置
Swappiness值大小对如何使用swap分区有着很大的影响。
它有0和100两个极限值,0代表最大限度的使用物理内存,然后才使用swap分区,这种行为有可能导致系统内存溢出,出现OOM的错误,从而导致mysql被意外KILL掉,所以需要谨慎设置。
100则是积极的使用swap分区,并且把内存上面的数据及时搬到swap分区里(不建议)。这里建议大家不分配swap,或者分配4GB的空间就足够了。
查看swappiness文件
cat /proc/sys/vm/swappiness
vm.swappiness默认为60,设置为0表示尽量少使用swap,100表示尽量将inactive的内存页交换到swap里或者释放cache。inactive内存的意思是程序映射着,但是”长时间”不用的内存。我们可以利用vmstat查看系统里面有多少inactive的内存。
# vmstat -a 1
这个值推荐设置为5,设置方法如下,在/etc/sysctl.conf文件中增加一行。
vm.swappiness = 5
sysctl -p生效。
5、文件系统的选择
推荐使用xfs文件系统,相比ext4,它更方便管理,支持动态扩容,删除文件也方便。(redhat 7默认xfs)
6、操作系统的限制
查看操作系统的限制情况:
ulimit -a
open files 如果设置不合理,当前服务器的连接过多或者表过多时,就有可能出现打不来表或者访问不了表的现象,默认情况下,Linux的最大句柄数为1024个,表示单个进程最多可以访问1024个文件句柄。如果超过默认值,就会出现文件句柄超限的错误“too much open files”。
max user processes 参数的用途是,有时候我们可能会跑对个实例,但是发现创建不了新的连接,报出“resource temprarily unavaliable”的错误,表示没有足够的资源。
为防止以上两种报错情况,我们可以修改系统的软件限制。
vi /etc/security/limits.conf
* soft nproc 65535
* hard nproc 65535
* soft nofile 65535
* hard nofile 65535
7、numa需要关闭
关闭numa功能可以更好地分配内存,不需要采用swap的方式来获取内存;有经验的系统管理员和DBA都知道使用swap导致的数据库性能下降影响很大。
语句如下:
具体情况具体修改
方法一:
numactl --interleave=all /usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf &
我的环境是:
numactl --interleave=all /usr/local/mysql5.6/bin/mysqld_safe --defaults-file=/etc/my3306.cnf &
numactl --interleave=all /usr/local/mysql5.7/bin/mysqld_safe --defaults-file=/etc/my3307.cnf &
方法二:
vi /etc/grub.conf
numa=off
保存,重启服务器。
8、上传镜像文件并安装源码包
yum -y install make gcc-c++ cmake bison-devel ncurses-devel glibc
三、安装MYSQL5.6
1、安装准备
先把软件包传到 /usr/local/ 目录下
groupadd mysql
useradd -g mysql mysql -s /sbin/nologin
设置mysql登入密码:passwd mysql
-s 指定它的shell
-d 指定用户主目录
-g 用户组 指定用户所属的用户组。
-G 用户组,用户组 指定用户所属的附加组。
-M:不要自动建立用户的登入目录。
passwd mysql --可以不用设置密码,因为MYSQL用户不登录。
cd /usr/local/
tar -zxvf mysql-5.6.38-linux-glibc2.12-x86_64.tar.gz
ln -s mysql-5.6.38-linux-glibc2.12-x86_64 mysql5.6 目录可以自己设置
建立目录:
mkdir -p /mydata/mysql/mysql3306/{data,logs} --生产中建议用项目名+端口号
修改权限:
chown -R mysql:mysql /mydata/mysql/mysql3306/
chown -R mysql:mysql /usr/local/mysql5.6
chown -R mysql:mysql /mydata
设置环境变量:
修改方法一:
echo $PATH
export PATH=$PATH:/usr/local/mysql5.6/bin
修改方法二:不推荐用此方法
echo "export PATH=$PATH:/usr/local/mysql5.6/bin" >> /etc/profile
或者用
vim /etc/profile
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/mysql5.6/bin
source /etc/profile
准备my3306.cnf 文件,可以自己命名成想要的文件名称。
阿里云是5.6.16版本
cpu 8核 内存32G innodb_buffer_pool_size 24G;具体设置看情况修改参数,没有分离出undo,tmp,测试环境可以自定义修改innodb_data_file_path,innodb_buffer_pool_size等参数的大小;也可参照姜老师的文件。
[client]
port = 3306
socket = /tmp/mysqlclient.sock
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
port = 3306
socket = /tmp/mysql3306.sock
basedir = /usr/local/mysql5.6
datadir = /mydata/mysql/mysql3306/data
open_files_limit = 3072
back_log = 103
max_connections = 512
max_connect_errors = 100000
table_open_cache = 512
external-locking = FALSE
max_allowed_packet = 128M
sort_buffer_size = 2M
join_buffer_size = 2M
thread_cache_size = 51
query_cache_size = 32M
tmp_table_size = 96M
max_heap_table_size = 96M
slow_query_log = 1
slow_query_log_file = /mydata/mysql/mysql3306/logs/slow.log
log-error = /mydata/mysql/mysql3306/logs/error.log
log_bin_trust_function_creators=1
long_query_time = 0.05
server-id = 1323306
log-bin = /mydata/mysql/mysql3306/logs/mysql-bin
sync_binlog = 1
binlog_cache_size = 4M
max_binlog_cache_size = 128M
max_binlog_size = 1024M
expire_logs_days = 7
key_buffer_size = 32M
read_buffer_size = 1M
read_rnd_buffer_size = 16M
bulk_insert_buffer_size = 64M
character-set-server=utf8
default-storage-engine=InnoDB
binlog_format=row
#gtid_mode=on
#log_slave_updates=1
#enforce_gtid_consistency=1
interactive_timeout=100
wait_timeout=100
transaction_isolation = REPEATABLE-READ
innodb_additional_mem_pool_size = 16M
innodb_buffer_pool_size = 1434M
innodb_data_file_path = ibdata1:1024M:autoextend
innodb_flush_log_at_trx_commit = 1
innodb_log_buffer_size = 16M
innodb_log_file_size = 256M
innodb_log_files_in_group = 2
innodb_max_dirty_pages_pct = 50
innodb_file_per_table = 1
innodb_locks_unsafe_for_binlog = 0
[mysqldump]
quick
max_allowed_packet = 32M
2、安装MYSQL5.6
cd /usr/local/mysql5.6/scripts/
./mysql_install_db --basedir=/usr/local/mysql5.6 --datadir=/mydata/mysql/mysql3306/data --defaults-file=/etc/my3306.cnf --user=mysql
如下:
两次OK
启动mysql5.6
/usr/local/mysql5.6/bin/mysqld_safe --defaults-file=/etc/my3306.cnf &
查看mysql进程,验证是否启动成功:
注意:
Mysql 读取配置文件的顺序是
/etc/my.cnf /etc/mysql/my.cnf /usr/local/mysql/etc/my.cnf ~/.my.cnf
MYSQL关闭:
/usr/local/mysql5.6/bin/mysqladmin -S /tmp/mysql3306.sock shutdown
本地登陆:
mysql -S /tmp/mysql3306.sock
3、参数修改
1、修改数据库root密码
[root@laodeng5 mysql-5.6.15]# mysqladmin -u root password 'mysql'
或者
方法二:
mysql>set password for 'root'@'localhost'=password('mysql');
mysql>flush privileges;
登陆方式:
mysql -S /tmp/mysql3306.sock -uroot -p'mysql'
关闭数据库:
mysqladmin -S /tmp/mysql3306.sock shutdown -uroot –p’mysql’
2、5.7之前需要安全加固
show databases;
select user,host,password from mysql.user; --实际就需要user localhost,其它都可以删掉
delete from mysql.user where user != 'root' or host != 'localhost';
mysql> grant all privileges on *.* to root@'%' identified by "password"; --windows 只允许本地访问,需要给root赋权
Query OK, 0 rows affected (0.00 sec)
3、删除测试库(可选)
select * from mysql.db\G
truncate table mysql.db;
drop database test;
flush privileges;
怎么确认mysql是否启动起来的?
A.查看进程是否存在
ps aux|grep mysqld
B.查看端口是不是监听正确
netstat -nlap|grep mysqld
ss -lnpt | grep mysqld
C.查看错误日志有无异常
vim
tail
less
设置大小写不敏感:
mysql> show variables like '%case%';
+------------------------+-------+
| Variable_name | Value |
+------------------------+-------+
| lower_case_file_system | OFF |
| lower_case_table_names | 1 |
+------------------------+-------+
注意:lower_case_table_names=1,参数为静态参数,需要在my.cnf配置后进去重启生效。
四、安装MYSQL5.7
1、安装准备工作
MYSQL5.7已经废弃了mysql_install_db 这个初始化命令了。
先把软件包传到 /usr/local/ 目录下
groupadd mysql
useradd -g mysql mysql -s /sbin/nologin
设置mysql登入密码:passwd mysql --可以不用设置密码,因为MYSQL用户不登录。
-s 指定它的shell
-d 指定用户主目录
-g 用户组 指定用户所属的用户组。
-G 用户组,用户组 指定用户所属的附加组。
-M:不要自动建立用户的登入目录。
passwd mysql
cd /usr/local/
tar -zxvf mysql-5.7.20-linux-glibc2.12-x86_64.tar.gz
ln -s mysql-5.7.20-linux-glibc2.12-x86_64 mysql5.7
mkdir -p /mydata/mysql/mysql3307/{data,logs}
修改权限:
chown -R mysql:mysql /mydata/mysql/mysql3307/
chown -R mysql:mysql /usr/local/mysql5.7
chown -R mysql:mysql /mydata
设置环境变量:
修改方法一:
echo $PATH
export PATH=$PATH:/usr/local/mysql5.7/bin
修改方法二:不推荐用此方法
echo "export PATH=$PATH:/usr/local/mysql5.7/bin" >> /etc/profile
或者用
vim /etc/profile
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/mysql5.7/bin
source /etc/profile
准备my3307.cnf 文件,可以自己命名成想要的文件名称。参数按照实际情况进行修改。
[client]
port = 3307
socket = /tmp/mysql5.7.sock
default-character-set=utf8
[mysql]
prompt="\u@db \R:\m:\s [\d]> "
no-auto-rehash
[mysqld]
user = mysql
port = 3307
basedir = /usr/local/mysql5.7
datadir = /mydata/mysql/mysql3307/data
socket = /tmp/mysql3307.sock
log_bin_trust_function_creators=1
character-set-server = utf8mb4
event_scheduler=1
sql_mode=STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
skip_name_resolve = 1
open_files_limit = 65535
back_log = 1024
max_connections = 500
max_connect_errors = 1000000
table_open_cache = 1024
table_definition_cache = 1024
table_open_cache_instances = 64
thread_stack = 512K
external-locking = FALSE
max_allowed_packet = 32M
sort_buffer_size = 4M
join_buffer_size = 4M
thread_cache_size = 768
query_cache_size = 0
query_cache_type = 0
interactive_timeout = 600
wait_timeout = 600
tmp_table_size = 32M
max_heap_table_size = 32M
slow_query_log = 1
slow_query_log_file = /mydata/mysql/mysql3307/logs/slow.log
log-error = /mydata/mysql/mysql3307/logs/error.log
long_query_time = 0.1
server-id = 3307101
log-bin = /mydata/mysql/mysql3307/logs/mysql-binlog
sync_binlog = 1
binlog_cache_size = 4M
max_binlog_cache_size = 1G
max_binlog_size = 1G
expire_logs_days = 7
master_info_repository = TABLE
relay_log_info_repository = TABLE
gtid_mode = on
enforce_gtid_consistency = 1
log_slave_updates
binlog_format = row
relay_log_recovery = 1
relay-log-purge = 1
key_buffer_size = 32M
read_buffer_size = 8M
read_rnd_buffer_size = 4M
bulk_insert_buffer_size = 64M
lock_wait_timeout = 3600
explicit_defaults_for_timestamp = 1
innodb_thread_concurrency = 0
innodb_sync_spin_loops = 100
innodb_spin_wait_delay = 30
transaction_isolation = REPEATABLE-READ
innodb_buffer_pool_size = 1024M
innodb_buffer_pool_instances = 8
innodb_buffer_pool_load_at_startup = 1
innodb_buffer_pool_dump_at_shutdown = 1
innodb_data_file_path = ibdata1:1G:autoextend
innodb_flush_log_at_trx_commit = 1
innodb_log_buffer_size = 32M
innodb_log_file_size = 2G
innodb_log_files_in_group = 2
innodb_max_undo_log_size = 4G
innodb_io_capacity = 2000
innodb_io_capacity_max = 4000
innodb_flush_neighbors = 0
innodb_write_io_threads = 8
innodb_read_io_threads = 8
innodb_purge_threads = 4
innodb_page_cleaners = 4
innodb_open_files = 65535
innodb_max_dirty_pages_pct = 50
innodb_flush_method = O_DIRECT
innodb_lru_scan_depth = 4000
innodb_checksum_algorithm = crc32
innodb_lock_wait_timeout = 10
innodb_rollback_on_timeout = 1
innodb_print_all_deadlocks = 1
innodb_file_per_table = 1
innodb_online_alter_log_max_size = 4G
internal_tmp_disk_storage_engine = InnoDB
innodb_stats_on_metadata = 0
innodb_status_file = 1
innodb_status_output = 0
innodb_status_output_locks = 0
performance_schema = 1
performance_schema_instrument = '%=on'
#innodb monitor
innodb_monitor_enable="module_innodb"
innodb_monitor_enable="module_server"
innodb_monitor_enable="module_dml"
innodb_monitor_enable="module_ddl"
innodb_monitor_enable="module_trx"
innodb_monitor_enable="module_os"
innodb_monitor_enable="module_purge"
innodb_monitor_enable="module_log"
innodb_monitor_enable="module_lock"
innodb_monitor_enable="module_buffer"
innodb_monitor_enable="module_index"
innodb_monitor_enable="module_ibuf_system"
innodb_monitor_enable="module_buffer_page"
innodb_monitor_enable="module_adaptive_hash"
[mysqldump]
quick
max_allowed_packet = 32M
2、安装MYSQL5.7
cd /usr/local/mysql5.7/bin/
./mysqld --defaults-file=/etc/my3307.cnf --basedir=/usr/local/mysql5.7 --datadir=/mydata/mysql/mysql3307/data/ --user=mysql --initialize
初始化加上initialize参数,表示会生成一个临时的数据库初始化密码,记录在log-error(错误日志)里面,如果加上--initialize-insecure参数,代表无密码进入。建议使用生成的初始化密码方式。
启动mysql5.7
/usr/local/mysql5.7/bin/mysqld_safe --defaults-file=/etc/my3307.cnf &
查看生成的密码文件:
cat /mydata/mysql/mysql3307/logs/error.log |grep password
3、参数修改:
登陆并修改密码:
/usr/local/mysql5.7/bin/mysql -S /tmp/mysql3307.sock -uroot -p'ogdf8ru<r,nI'
设置ROOT密码永不过期:
alter user 'root'@'localhost' password expire never;
设置ROOT 可以从其他客户端或者服务器登陆:
mysql> update mysql.user set Host='%' where User='root';
Query OK, 0 rows affected (0.00 sec)
Rows matched: 1 Changed: 0 Warnings: 0
mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)
mysql> select Host,User from mysql.user;
+-----------+---------------+
| Host | User |
+-----------+---------------+
| % | root |
| localhost | mysql.session |
| localhost | mysql.sys |
+-----------+---------------+
3 rows in set (0.00 sec)
设置大小写不敏感:
mysql> show variables like '%case%';
+------------------------+-------+
| Variable_name | Value |
+------------------------+-------+
| lower_case_file_system | OFF |
| lower_case_table_names | 1 |
+------------------------+-------+
注意:lower_case_table_names=1,参数为静态参数,需要在my.cnf配置后进去重启生效。
mysql> grant all privileges on *.* to root@'%' identified by "password"; --windows 只允许本地访问,需要给root赋权
Query OK, 0 rows affected (0.00 sec)
binlog2sql 工具的安装。
MYSQL5.6和5.7编译标准化安装与配置的更多相关文章
- Linux 下编译、安装、配置 QT
转自Linux 下编译.安装.配置 QT 注意:编译安装耗时费力,且很容易出错,要不断调整编译参数,不推荐使用,否则这将会是一个纠结痛苦的过程. 打算做嵌入式图像处理,计划方案嵌入式Linux+Ope ...
- 在centos6.6中mysql5.5的编译、安装、配置
今天根据需求要在centos6.6上编译安装mysql5.5,因为以前编译安装过感觉很简单,但是今天还是出现了点小问题,所以把过安装过程总结了一下: 好像从mysql5.5开始编译安装mysql需要用 ...
- MySQL-5.7.10主主同步的安装和配置
目录 目录 1 1. 安装 1 2. 修改MySQL的root密码 4 3. mysqld_safe和mysql.server 4 4. 主主同步配置 4 4.1. 创建同步用户 4 4.2. my. ...
- CentOS 6.5系统使用yum方式安装LAMP环境和phpMyAdmin,mysql8.0.1/mysql5.7.22+centos7,windows mysql安装、配置
介绍如何在CentOs6.2下面使用YUM配置安装LAMP环境,一些兄弟也很喜欢使用编译的安装方法,个人觉得如果不是对服务器做定制,用yum安装稳定简单,何必去download&make&am ...
- 数据库概述、mysql-5.7.11-winx64.zip 的下载、安装、配置和使用(windows里安装)图文详解
本博文的主要内容有 .数据库的概述 .mysql-5.7.11-winx64.zip 的下载 .mysql-5.7.11-winx64.zip 的安装 .mysql-5.7.11-winx64. ...
- [Linux 小技巧] Ubuntu 14.04 下编译、安装、配置最新开发版 GoldenDict
1. 背景介绍 GoldenDict 是一款非常优秀的跨平台电子词典软件,支持 StarDict.Babylon 等多种词典.其 PC 版基于 Qt 编写,完全免费.开源且没有广告.GoldenDic ...
- Windows平台Hadoop编译、安装、配置与运行(转)
http://www.srccodes.com/p/article/38/build-install-configure-run-apache-hadoop-2.2.0-microsoft-windo ...
- mysql5.7.10 源码编译安装记录 (centos6.4)【转】
一.准备工作 1.1 卸载系统自带mysql 查看系统是否自带MySQL, 如果有就卸载了, 卸载方式有两种yum, rpm, 这里通过yum卸载 rpm -qa | grep mysql //查看系 ...
- Linux下Qt的安装与配置
参考资料:http://www.cnblogs.com/emouse/archive/2013/01/28/2880142.html Linux 下编译.安装.配置 QT 下载qt 这里用的是4.7. ...
随机推荐
- 启动Mysql时,提示error 2002 的解决办法
故障描述 启动时提示ERROR 2002(HY000) 启动服务时,提示the server quit without updating PID file. 解决方法一: 1.由于mysql是卸载后重 ...
- 【SQL】约束
1. 添加约束 1)使用ALTER TABLE语句 •添加或删除约束,不会修改其结构 •启用和禁用约束 •通过使用MODIFY子句添加NOTNULL约束 ALTER TABLE <table_n ...
- java的优先队列注意事项
在C++语言中,使用优先队列,直接构建一个lambda表达式,使用一个匿名函数指针.java比较函数的返回值不是bool型,只能是整型. 内部对应的C++匿名函数: // 匿名Comparator实现 ...
- (转)C#开发微信门户及应用(3)--文本消息和图文消息的应答
http://www.cnblogs.com/wuhuacong/p/3622636.html 微信应用如火如荼,很多公司都希望搭上信息快车,这个是一个商机,也是一个技术的方向,因此,有空研究下.学习 ...
- vue 上滑加载更多
移动端网页的上滑加载更多,其实就是滑动+分页的实现. <template> <div> <p class="footer-text">--{{f ...
- shell脚本操作mysql数据库,使用mysql的-e参数可以执行各种sql的(创建,删除,增,删,改、查)等各种操作
mysql -hhostname -Pport -uusername -ppassword -e 相关mysql的sql语句,不用在mysql的提示符下运行mysql,即可以在shell中操作m ...
- Android 性能测试初探(四)
书接上文 Android 性能测试初探(三) 自从 cpu及内存后,GPU 这个词对于 PC 性能测试者也不陌生了,什么 3Dmax,安兔兔之类的第三方软件让 GPU 在移动端性能测试领域都知晓,但对 ...
- PAT_A1152#Google Recruitment
Source: PAT A1152 Google Recruitment (20 分) Description: In July 2004, Google posted on a giant bill ...
- 【剑指Offer】61、序列化二叉树
题目描述: 请实现两个函数,分别用来序列化和反序列化二叉树. 解题思路: 序列化是指将结构化的对象转化为字节流以便在网络上传输或写到磁盘进行永久存储的过程.反序列化是指将字节流转回结构 ...
- 【JavaScript】不使用正则表达式和字符串的方式来解析浏览器的URl地址信息
1.比如我们要获取的网站URl地址是:https://music.163.com/#/playlist?id=2384581760 一般我们能够想到的方式是直接使用正则表达式获取使用字符串直接解析的方 ...