总结一下,mysql的安装,
1.在官网上下载一个***.tar.gz的压缩包(已经编译好的),解压到指定位置,然后 把这个位置和/usr/local/mysql 做一个软连接(ln -s [mysql实际目录] /usr/local/mysql)
2.添加/usr/local/mysql 的一些用户和用户组权限 (之后一切安装和配置的路径将围绕/usr/local/mysql进行)
3.进行初始化命令 ./bin/mysqld --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --initialize (会显示初始密码)
4.新建/etc/my.cnf配置文件
5.启动mysql进入mysql,改密码访问权限等.
一、安装包下载
下载地址:https://dev.mysql.com/downloads/mysql/5.6.html#downloads
二、安装
先检查是否已经安装了mysql和mariadb
rpm -qa | grep -i mysql
rpm -qa | grep mariadb
[root@localhost ~]# rpm -qa | grep mariadb
mariadb-libs-5.5.56-2.el7.x86_64
[root@localhost ~]# rpm -e --nodeps mariadb-libs-5.5.56-2.el7.x86_64
1.将下载好的安装到解压到/usr/local目录下(或其他目录,之后会建立一个软连接指向/usr/local/mysql/)
tar -zxvf mysql-5.7.9-linux-glibc2.5-x86_64.tar.gz -C /usr/local/
2.进入/usr/local目录
cd /usr/local/
3.为mysql安装目录创建软链接
ln -s mysql-5.7.9-linux-glibc2.5-x86_64 mysql
4.为centos添加mysql用户组和mysql用户(-s /bin/false参数指定mysql用户仅拥有所有权,而没有登录权限)
groupadd mysql useradd -r -g mysql -s /bin/false mysql
5.进入安装mysql软件的目录,命令如下
cd /usr/local/mysql
6.修改当前目录拥有者为新建的mysql用户,命令如下:
chown -R mysql:mysql ./
7.安装mysql,命令如下:
./bin/mysqld --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --initialize
如果出现如下图所示则为安装成功,红线部分为生成的默认密码:
8.开启mysql服务,命令如下:
./support-files/mysql.server start
如果出现如下错误,则说明mysql配置文件/etc/my.cnf中的路径不对,修改内容如下,datadir(datadir一定要加)和socket都修改成mysql的安装目录下,增加[client]板块,用于命令行连接mysql数据库。
[mysqld] port=3306 datadir=/usr/local/mysql/data socket=/usr/local/mysql/mysql.sock user=mysql max_connections=151 # Disabling symbolic-links is recommended to prevent assorted security risks symbolic-links=0 # 设置忽略大小写 lower_case_table_names = 1 # 指定编码 character-set-server=utf8 collation-server=utf8_general_ci # 开启ip绑定 bind-address = 0.0.0.0 [mysqld_safe] log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid #指定客户端连接mysql时的socket通信文件路径 [client] socket=/usr/local/mysql/mysql.sock default-character-set=utf8
9.重新启开启mysql服务,如下图所示则开启成功!
./support-files/mysql.server start
10.将mysql进程放入系统进程中,命令如下:
cp support-files/mysql.server /etc/init.d/mysqld
11.重新启动mysql服务,命令如下:
service mysqld restart
12.配置mysql环境变量
输入 vi /etc/profile,
按 i 键后 进入insert模式,进入insert模式后才能进行修改 输入 export PATH=$PATH:/usr/local/mysql/bin
修改完成后
按esc键进入command模式,
然后:wq 保存文件并退出vi(注意先冒号)
保存退出,再编译下:
source /etc/profile
13.使用随机密码登录mysql数据库,命令如下:
mysql -u root -p
14. 输入show databases;进入mysql操作行,为root用户设置新密码(小编设为root):
或者输入
alter user 'root'@'localhost' identified by 'root';
15.设置允许远程连接数据库,命令如下:
先选择数据库:
use mysql; update user set user.Host='%' where user.User='root'; 查看修改后的值: select user,host from user;
16.刷新权限,命令如下:
flush privileges;
17、开启3306防火墙端口,然后即可远程连接mysql(因为我的防火墙是全部关闭,所以省略了这步)
18、如果还是无法远程连接,查看/etc/my.cnf
找到bind-address = 127.0.0.1这一行
改为bind-address = 0.0.0.0即可
19, 设置开机自启
chkconfig mysqld on 要取消掉某个服务自动启动,只需要将最后的参数 “on” 变更为 “off” 即可。
查看自启项目 chkconfig --list
20, firewall-cmd --list-all 看看3306是否列出来,如果没列出来,需要打开
打开3306端口 firewall-cmd --permanent --add-port=3306/tcp
成功后重启防火墙service firewalld restart
常用命令
top 看资源使用情况, 按一下1键, 显示每个CPU的使用情况.
启动mysql服务
service mysqld start
登录本机mysql数据库
mysql -u root -p
重启mysql服务
service mysqld restart
停止mysql服务
service mysqld stop
登录远程mysql数据库
mysql -h主机地址 -u用户名 -p用户密码
查看mysql运行状态
service mysqld status
查看mysql的运行使用的进程
ps -e |grep mysql
-------------------------------
字节计算器:https://calc.itzmx.com/
----------------------------------
-------------------
MySQL查看配置文件
1:使用locate my.cnf命令可以列出所有的my.cnf文件
2:查看是否使用了指定目录的my.cnf。 启动mysql后,我们查看mysql的进程,看看是否有设置使用指定目录的my.cnf文件,如果有则表示mysql启动时是加载了这个配置文件。
命令 ps aux|grep mysql|grep 'my.cnf' ,如果上面的命令没有输出,表示没有设置使用指定目录的my.cnf。可以看到/usr/local/Cellar/mysql/5.6.24/my.cnf就是mysql启动加载的配置文件。
3:查看mysql默认读取my.cnf的目录。如果没有设置使用指定目录的my.cnf,mysql启动时会读取安装目录根目录及默认目录下的my.cnf文件。
查看mysql启动时读取配置文件的默认目录,命令 mysql --help|grep 'my.cnf' ,
输出
order of preference, my.cnf, $MYSQL_TCP_PORT,
/etc/my.cnf /etc/mysql/my.cnf /usr/local/etc/my.cnf ~/.my.cnf
/etc/my.cnf, /etc/mysql/my.cnf, /usr/local/etc/my.cnf, ~/.my.cnf
这些就是mysql默认会搜寻my.cnf的目录,顺序排前的优先。
4:启动时没有使用配置文件
如果没有设置使用指定目录my.cnf文件及默认读取目录没有my.cnf文件,表示mysql启动时并没有加载配置文件,而是使用默认配置。
需要修改配置,可以在mysql默认读取的目录中,创建一个my.cnf文件(例如:/etc/my.cnf),把需要修改的配置内容写入,重启mysql后即可生效。
--------------------------------------------------
-- 查询非 Sleep 状态的链接,按消耗时间倒序展示,自己加条件过滤
select id, db, user, host, command, time, state, info
from information_schema.processlist
where command != 'Sleep'
order by time desc
-----------------------------------------------------------------
通过show processlist查看MySQL的进程状态,在State列上面的状态有如下这些:
Analyzing
线程对MyISAM 表的统计信息做分析(例如, ANALYZE TABLE )。
checking permissions
线程检查服务器是否具有所需的权限来执行该语句。
Checking table
线程正在执行表检查操作。
cleaning up
线程处理一个命令,并正准备释放内存和重置某些状态变量。
closing tables
线程改变表中的数据刷新到磁盘和关闭使用的表。
converting HEAP to MyISAM
线程从转换内部临时表MEMORY内存表到磁盘MyISAM表。
copy to tmp table
线程正在处理一个ALTER TABLE语句。
Copying to group table
如果语句有不同的ORDER BY和GROUP BY标准,按组排序并复制到一个临时表。
Copying to tmp table
服务器复制到内存中的临时表。
Copying to tmp table on disk
服务器复制到一个临时表在磁盘上。
Creating index
线程正在处理ALTER TABLE ... ENABLE KEYS。
Creating sort index
线程正在处理一个SELECT,使用内部临时表解决。
creating table
线程创建一个表, 这包括建立临时表。
Creating tmp table
线程创建一个临时表在内存或磁盘上。 如果表是在内存中创建,但后来被转换成一个磁盘上的表,在该操作状态为Copying to tmp table on disk。
deleting from main table
服务器正在执行多表删除的第一部分。 它只能从第一个表中删除,并保存列和删除从其他表(参考)偏移。
deleting from reference tables
服务器正在执行多表删除的第二部分,从其他表中删除匹配的行。
discard_or_import_tablespace
线程正在处理一个ALTER TABLE ... DISCARD TABLESPACE或ALTER TABLE ... IMPORT TABLESPACE语句。
end
这发生在最后的清理工作,有ALTER TABLE , CREATE VIEW , DELETE , INSERT , SELECT或UPDATE语句。
executing
线程已开始执行语句。
Execution of init_command
线程正在执行中的init_command系统变量。
freeing items
线程已执行的命令。 释放一些在这种状态下完成的项目,涉及的查询缓存。 这种状态通常后跟cleaning up 。
Flushing tables
线程正在执行FLUSH TABLES ,等待所有线程关闭其表。
FULLTEXT initialization
该服务器是准备执行一个自然语言的全文检索。
init
在发生之前的初始化ALTER TABLE , DELETE , INSERT , SELECT或UPDATE语句。 服务器在这种状态下采取的行动包括冲洗二进制日志中InnoDB日志,和一些查询缓存清理操作。
Killed
有人发送一个KILL线程的语句,它应该中止在下一次检查杀死标志。
Locked
查询被锁定由另一个查询。
logging slow query
线程正在写慢查询日志的语句。
NULL
这种状态是用于SHOW PROCESSLIST状态。
login
连接线程的初始状态,直到客户端已成功通过身份验证。
Opening tables , Opening table
线程试图打开一个表。 这应该是非常快的过程中,除非有阻止打开。
optimizing
服务器执行查询的初始优化。
preparing
这种状态出现在查询优化过程中。
Purging old relay logs
线程是消除不必要的中继日志文件。
query end
这种状态发生后处理查询,但在此freeing items的项目状态。
Reading from net
服务器读网络数据包。
Removing duplicates
查询使用SELECT DISTINCT在这样一种方式。 MySQL需要一个额外的的阶段,将结果发送到客户端之前删除所有重复行。
removing tmp table
线程移除临时表。 如果没有创建临时表,这种状态是不使用。
rename
线程重命名表。
rename result table
线程正在处理一个ALTER TABLE语句,创建新表并重新命名它来取代原来的表。
Reopen tables
线程有一个表锁,并试图重新打开它。
Repair by sorting
使用排序修复索引。
Repair done
修复完成。
Repair with keycache
修复使用键缓存。用于myisam表,出现该状态应加大myisam_max_sort_file_size。
Rolling back
回滚事务。
Saving state
保存状态。
Searching rows for update
线程做第一阶段前更新他们找到所有匹配的行。
Sending data
线程处理一个SELECT语句,将数据发送到客户端。 因为在这个状态发生的操作往往执行大量的磁盘访问(读取),查询的生命周期最长的运行状态。
setup
线程开始一个ALTER TABLE操作。
Sorting for group
线程做一个分组。
Sorting for order
线程做ORDER BY排序。
Sorting index
线程排序索引,更高效的访问MyISAM表的优化操作。
Sorting result
对于SELECT语句,这是Creating sort index类似,但不用临时表。
statistics
服务器计算统计数据,以制定一个查询执行计划。 如果一个线程处于这种状态很长一段时间,可能是磁盘在执行其他工作。
System lock
该线程正在等待内部或外部的系统锁表。 可以与外部系统--skip-external-locking锁定选项。
Table lock
线程要求内部表锁。
Updating
线程正在寻找要更新的行。
updating main table
服务器正在执行多表更新的第一部分,它只更新第一个表。
updating reference tables
服务器正在执行多表更新的第二部分。
User lock
线程请求或要求与锁等待GET_LOCK()调用。
Waiting for release of readlock
线程正在等待另一个线程的锁被释放。
Waiting for tables , Waiting for table
线程得到一个表的基本结构发生了变化的通知,它需要重新打开表,以获取新的结构。 必须等到所有其他线程已经关闭表。
如果另一个线程已FLUSH TABLES或表执行下面的语句:FLUSH TABLES tbl_name、ALTER TABLE、RENAME TABLE、REPAIR TABLE、ANALYZE TABLE、OPTIMIZE TABLE。
Waiting on cond
在该线程正在等待一个条件。
Waiting to get readlock
线程已发出一个FLUSH TABLES WITH READ LOCK语句获得全局读锁,并正在等待获取锁。
Writing to net、waiting for net
服务器写一个数据包活等待网络,要是大量出现请迅速检查数据库到前端的网络连接状态和流量。
----------------------------------
# MySql5.7配置文件my.cnf设置
[client]
port = 3306
socket = /tmp/mysql.sock
[mysqld]
###############################基础设置#####################################
#Mysql服务的唯一编号 每个mysql服务Id需唯一
server-id = 1
#服务端口号 默认3306
port = 3306
#mysql安装根目录
basedir = /opt/mysql
#mysql数据文件所在位置
datadir = /opt/mysql/data
#临时目录 比如load data infile会用到
tmpdir = /tmp
#设置socke文件所在目录
socket = /tmp/mysql.sock
#主要用于MyISAM存储引擎,如果多台服务器连接一个数据库则建议注释下面内容
skip-external-locking
#只能用IP地址检查客户端的登录,不用主机名
skip_name_resolve = 1
#数据库默认字符集,主流字符集支持一些特殊表情符号(特殊表情符占用4个字节)
character-set-server = utf8mb4
#数据库字符集对应一些排序等规则,注意要和character-set-server对应
collation-server = utf8mb4_general_ci
#设置client连接mysql时的字符集,防止乱码
init_connect='SET NAMES utf8mb4'
#是否对sql语句大小写敏感,1表示不敏感
lower_case_table_names = 1
#最大连接数
max_connections = 400
#最大错误连接数
max_connect_errors = 1000
#TIMESTAMP如果没有显示声明NOT NULL,允许NULL值
explicit_defaults_for_timestamp = true
#SQL数据包发送的大小,如果有BLOB对象建议修改成1G
max_allowed_packet = 128M
#MySQL连接闲置超过一定时间后(单位:秒)将会被强行关闭
#MySQL默认的wait_timeout 值为8个小时, interactive_timeout参数需要同时配置才能生效
interactive_timeout = 1800
wait_timeout = 1800
#内部内存临时表的最大值 ,设置成128M。
#比如大数据量的group by ,order by时可能用到临时表,
#超过了这个值将写入磁盘,系统IO压力增大
tmp_table_size = 134217728
max_heap_table_size = 134217728
##----------------------------用户进程分配到的内存设置BEGIN-----------------------------##
##每个session将会分配参数设置的内存大小
#用于表的顺序扫描,读出的数据暂存于read_buffer_size中,当buff满时或读完,将数据返回上层调用者
#一般在128kb ~ 256kb,用于MyISAM
#read_buffer_size = 131072
#用于表的随机读取,当按照一个非索引字段排序读取时会用到,
#一般在128kb ~ 256kb,用于MyISAM
#read_rnd_buffer_size = 262144
#order by或group by时用到
#建议先调整为2M,后期观察调整
sort_buffer_size = 2097152
#一般数据库中没什么大的事务,设成1~2M,默认32kb
binlog_cache_size = 524288
############################日 志 设置##########################################
#数据库错误日志文件
log_error = error.log
#慢查询sql日志设置
slow_query_log = 1
slow_query_log_file = slow.log
#检查未使用到索引的sql
log_queries_not_using_indexes = 1
#针对log_queries_not_using_indexes开启后,记录慢sql的频次、每分钟记录的条数
log_throttle_queries_not_using_indexes = 5
#作为从库时生效,从库复制中如何有慢sql也将被记录
log_slow_slave_statements = 1
#慢查询执行的秒数,必须达到此值可被记录
long_query_time = 2
#检索的行数必须达到此值才可被记为慢查询
min_examined_row_limit = 100
#mysql binlog日志文件保存的过期时间,过期后自动删除
expire_logs_days = 5
############################主从复制 设置########################################
#开启mysql binlog功能
log-bin=mysql-bin
#binlog记录内容的方式,记录被操作的每一行
binlog_format = ROW
#作为从库时生效,想进行级联复制,则需要此参数
log_slave_updates
#作为从库时生效,中继日志relay-log可以自我修复
relay_log_recovery = 1
#作为从库时生效,主从复制时忽略的错误
slave_skip_errors = ddl_exist_errors
##---redo log和binlog的关系设置BEGIN---##
#(步骤1) prepare dml相关的SQL操作,然后将redo log buff中的缓存持久化到磁盘
#(步骤2)如果前面prepare成功,那么再继续将事务日志持久化到binlog
#(步骤3)如果前面成功,那么在redo log里面写上一个commit记录
#当innodb_flush_log_at_trx_commit和sync_binlog都为1时是最安全的,
#在mysqld服务崩溃或者服务器主机crash的情况下,binary log只有可能丢失最多一个语句或者一个事务。
#但是都设置为1时会导致频繁的io操作,因此该模式也是最慢的一种方式。
#当innodb_flush_log_at_trx_commit设置为0,mysqld进程的崩溃会导致上一秒钟所有事务数据的丢失。
#当innodb_flush_log_at_trx_commit设置为2,只有在操作系统崩溃或者系统掉电的情况下,上一秒钟所有事务数据才可能丢失。
#commit事务时,控制redo log buff持久化磁盘的模式 默认为1
innodb_flush_log_at_trx_commit = 2
#commit事务时,控制写入mysql binlog日志的模式 默认为 0
#innodb_flush_log_at_trx_commit和sync_binlog都为1时,mysql最为安全但性能上压力也是最大
sync_binlog = 1
##---redo log 和 binlog的关系设置END---##
############################Innodb设置##########################################
#数据块的单位8k,默认是16k,16kCPU压力稍小,8k对select的吞吐量大
#innodb_page_size的参数值也影响最大索引长度,8k比16k的最大索引长度小
#innodb_page_size = 8192
#一般设置物理存储的60% ~ 70%
innodb_buffer_pool_size = 1G
#5.7.6之后默认16M
#innodb_log_buffer_size = 16777216
#该参数针对unix、linux,window上直接注释该参数.默认值为NULL
#O_DIRECT减少操作系统级别VFS的缓存和Innodb本身的buffer缓存之间的冲突
innodb_flush_method = O_DIRECT
#此格式支持压缩, 5.7.7之后为默认值
innodb_file_format = Barracuda
#CPU多核处理能力设置,假设CPU是2颗4核的,设置如下
#读多,写少可以设成2:6的比例
innodb_write_io_threads = 4
innodb_read_io_threads = 4
#提高刷新脏页数量和合并插入数量,改善磁盘I/O处理能力
#默认值200(单位:页)
#可根据磁盘近期的IOPS确定该值
innodb_io_capacity = 500
#为了获取被锁定的资源最大等待时间,默认50秒,超过该时间会报如下错误:
# ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction
innodb_lock_wait_timeout = 30
#调整buffer pool中最近使用的页读取并dump的百分比,通过设置该参数可以减少转储的page数
innodb_buffer_pool_dump_pct = 40
#设置redoLog文件所在目录, redoLog记录事务具体操作内容
innodb_log_group_home_dir = /opt/mysql/redolog/
#设置undoLog文件所在目录, undoLog用于事务回滚操作
innodb_undo_directory = /opt/mysql/undolog/
#在innodb_log_group_home_dir中的redoLog文件数, redoLog文件内容是循环覆盖写入。
innodb_log_files_in_group = 3
#MySql5.7官方建议尽量设置的大些,可以接近innodb_buffer_pool_size的大小
#之前设置该值较大时可能导致mysql宕机恢复时间过长,现在恢复已经加快很多了
#该值减少脏数据刷新到磁盘的频次
#最大值innodb_log_file_size * innodb_log_files_in_group <= 512GB,单文件<=256GB
innodb_log_file_size = 1024M
#设置undoLog文件所占空间可以回收
#5.7之前的MySql的undoLog文件一直增大无法回收
innodb_undo_log_truncate = 1
innodb_undo_tablespaces = 3
innodb_undo_logs = 128
#5.7.7默认开启该参数 控制单列索引长度最大达到3072
#innodb_large_prefix = 1
#5.7.8默认为4个, Inodb后台清理工作的线程数
#innodb_purge_threads = 4
#通过设置配置参数innodb_thread_concurrency来限制并发线程的数量,
#一旦执行线程的数量达到这个限制,额外的线程在被放置到对队列中之前,会睡眠数微秒,
#可以通过设定参数innodb_thread_sleep_delay来配置睡眠时间
#该值默认为0,在官方doc上,对于innodb_thread_concurrency的使用,也给出了一些建议:
#(1)如果一个工作负载中,并发用户线程的数量小于64,建议设置innodb_thread_concurrency=0;
#(2)如果工作负载一直较为严重甚至偶尔达到顶峰,建议先设置innodb_thread_concurrency=128,
###并通过不断的降低这个参数,96, 80, 64等等,直到发现能够提供最佳性能的线程数
#innodb_thread_concurrency = 0
############################其他内容 设置##########################################
[mysqldump]
quick
max_allowed_packet = 128M
[mysql]
no-auto-rehash
[myisamchk]
key_buffer_size = 20M
sort_buffer_size = 256k
read_buffer = 2M
write_buffer = 2M
[mysqlhotcopy]
interactive-timeout
[mysqld_safe]
#增加每个进程的可打开文件数量.
open-files-limit = 28192