匹配 aio 默认 是个 初始 快速排序 -h mysql 密码 自动创建
一、MYSQL 服务器端程序层次结构
1.1 连接层连接协议:tcpip socket
验证连接合法性
分配连接线程为客户端服务
1.2 SQL 层解析
优化
授权表
查询
提供缓存
1.3 存储引擎层插件式的
存储数据到磁盘
数据提取
2、数据库的逻辑结构库
show databases
use mysql
表
show tables;
记录(行、列)
select user,host,password from user;
desc user
3、数据库的物理结构(怎么存储的)对象存储:
库 ----> 目录
表:
MyIASM:
user.frm
user.MYD
user.MYI
InnoDB:
共享表空间:ibdata1:ibdata2
独立表空间:t1.frm t1.ibd
例子:创建一个数据库和表,查看一下独立表空间存储的不同
create database oldboy;
use oldboy
create table t1 (id int);
insert into t1 values(1);
select id from t1;
desc t1;
二、MYSQL 安装前准备 1)独立安装磁盘mkfs.ext4 /dev/sdb
mkdir /application
mount /dev/sdb /application
blkid -----> 查询 / dev/sdb 的 uuid
vi /etc/fstab
xxx-xxx-xxxx-xxxx /application ext4 defaults 0 0
2)依赖包安装yum install -y ncurses-devel libaio-devel c++ gcc
yum groupinstall "Development tools" -y
3) 安装预编译 cmake
yum install cmake -y
rpm -qa cmake
4) 创建 mysql 用户useradd -s /sbin/nologin -M mysql
id mysql
perror 查看错误代码
5)官网下载 mysql 包文件并解压安装wget -q http://mirrors.sohu.com/mysql/MySQL-5.6/mysql-5.6.36.tar.gz
ls -l mysql-5.6.36.tar.gz
tar xf mysql-5.6.36.tar.gz
cd mysql-5.6.36
cmake . -DCMAKE_INSTALL_PREFIX=/application/mysql-5.6.36 \
-DMYSQL_DATADIR=/application/mysql-5.6.36/data \
-DMYSQL_UNIX_ADDR=/application/mysql-5.6.36/tmp/mysql.sock \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_EXTRA_CHARSETS=all \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_FEDERATED_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITHOUT_EXAMPLE_STORAGE_ENGINE=1 \
-DWITH_ZLIB=bundled \
-DWITH_SSL=bundled \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_EMBEDDED_SERVER=1 \
-DENABLE_DOWNLOADS=1 \
-DWITH_DEBUG=0
注:mysql 安装参数部分解释收藏
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql #安装目录
-DMYSQL_DATADIR=/data #数据库存放目录
-DSYSCONFDIR=/etc #MySQL 配辑文件
-DWITH_MYISAM_STORAGE_ENGINE=1 #安装 myisam 存储引擎
-DWITH_INNOBASE_STORAGE_ENGINE=1 #安装 innodb 存储引擎
-DWITH_ARCHIVE_STORAGE_ENGINE=1 #安装 archive 存储引擎
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 #安装 blackhole 存储引擎
-DWITH_LOCAL_INFILE=1 #允许从本地导入数据
-DWITH_READLINE=1 #快捷键功能
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock #Unix socket 文件路径
-DDEFAULT_CHARSET=utf8 #默认字符
-DDEFAULT_COLLATION=utf8_general_ci #校验字符
-DEXTRA_CHARSETS=all #安装所有扩展字符集
-DMYSQL_TCP_PORT=3306
-DMYSQL_USER=mysql 、
-DWITH_SSL=yes
-DWITH_MEMORY_STORAGE_ENGINE=1 #安装 memory 存储引擎
-DWITH_FEDERATED_STORAGE_ENGINE=1 #安装 frderated 存储引擎
6)初始化 mysql 数据库以及配置数据库
cp support-files/my*.cnf /etc/my.cnf
注:编译的 MySQL 可以暂时不需要设置配置文件。
如果以前操作系统中安装过 rpm 格式的 mysql,系统中可能会遗留 / etc/my.cnf 文件,我们需要将它删除掉
/application/mysql/scripts/mysql_install_db --basedir=/application/mysql/ --datadir=/application/mysql/data --user=mysql
make && make install
ln -s /application/mysql-5.6.36/ /application/mysql
7)mysql 开机启动chown -R mysql.mysql /application/mysql/
cp support-files/mysql.server /etc/init.d/mysqld
chmod 700 /etc/init.d/mysqld
chkconfig mysqld on
chkconfig --list mysqld
/etc/init.d/mysqld start
netstat -lntup|grep 330
echo 'PATH=/application/mysql/bin/:$PATH' >>/etc/profile
tail -1 /etc/profile
source /etc/profile
echo $PATH
mysql
注:
此时数据库启动会提示,找不到 xx/tmp/mysql.sock, 原因是 5.6.36 版本不会自动创建 tmp 目录,需要我们手工 mkdir /application/mysql/tmp
8)mysql 排错1、查日志 ####tail -100 /application/mysql/data/db02.err
2、查屏幕输出
故障: ERROR! The server quit without updating PID file
1. 权限. chown -R mysql.mysql
2.killall mysqld
3. 重新初始化数据.
4. 运行 1 年了, 出问题 (非法(断电)关机或者非法关数据库,例如 kill -9).
9)mysql 清理无用的用户select user,host from mysql.user;
drop user ''@'db02';
drop user ''@'localhost';
drop user 'root'@'db02';
drop user 'root'@'::1';
select user,host from mysql.user;
drop database test;
show databases;
10)客户端连接 mysql通过 socket 方式:(mysql 本地连接默认使用 socket 方式)
mysql -uroot -p123456 -S /usr/local/mysql/data/mysql.sock
通过 TCP/IP 方式
mysql -uroot -p123456 -h 远程 IP
11)mysql 用户管理#查询用户名、密码和权限
mysql> select user,password,host from mysql.user;
+------+-------------------------------------------+-----------+
| user | password | host |
+------+-------------------------------------------+-----------+
| root | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | localhost |
+------+-------------------------------------------+-----------+
#查看数据库
show databases;
#创建数据库
create database app;
#查看指定数据库表
use mysql;
show tables;
#创建用户并对指定数据库授权
mysql> grant all on app.* to app@'10.0.0.%' identified by '123456';
#创建单个用户
create user '用户'@'主机' IDENTIFIED BY '密码';
create user 'oldboy'@'locahost' identified by 'oldboy123';
#给用户授权
mysql> grant all on mysql.* to zhangsan1@'10.0.10.%';
#删除用户
drop user 'user'@'主机域'
特殊的删除方法:
mysql> delete from mysql.user where user='app' and host='localhost';
mysql> flush privileges;
#创建用户同时授权
grant all on *.* to oldgirl@'172.16.1.%' identified by 'oldgirl123';
flush privileges;
#查看某个用户数据库权限
mysql> select user,host,password from mysql.user;
+----------+-----------+-------------------------------------------+
| user | host | password |
+----------+-----------+-------------------------------------------+
| root | localhost | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| zhangsan | 10.0.10.% | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 |
| lisi | 10.0.10.% | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 |
| super | localhost | *531E182E2F72080AB0740FE2F2D689DBE0146E04 |
| wanger | 10.0.10.% | *E8D868B7DA46FC9F996DC761C1AE01754A4447D5 |
+----------+-----------+-------------------------------------------+
mysql> show grants for lisi@'10.0.10.%'\G;
*************************** 1. row ***************************
Grants for lisi@10.0.10.%: GRANT USAGE ON *.* TO 'lisi'@'10.0.10.%' IDENTIFIED BY PASSWORD '*23AE809DDACAF96AF0FD78ED04B6A265E05AA257'
*************************** 2. row ***************************
Grants for lisi@10.0.10.%: GRANT SELECT ON `app`.* TO 'lisi'@'10.0.10.%'
2 rows in set (0.00 sec)
注:当单个用户权限出现冲突时,以权限最大的设置为准
#单独收回数据库某个权限
mysql> revoke drop on wordpress.* from wordpress@'10.0.0.%';
Query OK, 0 rows affected (0.00 sec)
#可以授权的用户权限:
INSERT,SELECT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER, CREATE TABLESPACE
#收回权限:
REVOKE INSERT ON wordpress.* from oldboy@'localhost';
#收回某个数据库的所有权限
revoke all on wordpress.* from wordpress@'10.0.0.%';
注:企业里创建用户一般是授权一个内网网段登录,最常见的网段写法有两种。
方法 1:172.16.1.%(% 为通配符,匹配所有内容)。
方法 2:172.16.1.0/255.255.255.0,但是不能使用 172.16.1.0/24,是个小遗憾。
例:博客授权:
grant select,insert,update,delete,create,drop on blog.* to 'blog'@'172.16.1.%' identified by 'blog123';
revoke create,drop on blog.* from 'blog'@'172.16.1.%';
11)mysql 密码忘记更改方法适用于 V5.6 版本
#用以下命令启动 mysql
/usr/local/mysql/bin/mysqld_safe --skip-grant-table --skip-networking &
#登陆 mysql
mysql
#修改密码:
mysql> select user,password,host from mysql.user
mysql> update mysql.user set password=PASSWORD('123456') where user='wordpress' and host='192.168.56.%';
#正常启动 mysql
mysql -uroot -p123456 -h 192.168.56.11
12)mysql 配置文件读取顺序/etc/my.cnf --> /etc/mysql/my.cnf --> $MYSQL_HOME/my.cnf --> ~/.my.cnf
--> --defaults-extra-file --> --defaults-file 最后读取命令行上其他的配置
13)mysql 错误代码perror
http://oldboy.blog.51cto.com/2561410/1728380
my.cnf 参数说明仅仅个人收藏
[client]
port = 3309
socket = /home/mysql/mysql/tmp/mysql.sock
[mysqld]
!include /home/mysql/mysql/etc/mysqld.cnf #包含的配置文件 ,把用户名,密码文件单独存放
port = 3309
socket = /home/mysql/mysql/tmp/mysql.sock
pid-file = /usr/local/mysql/var/mysql.pid
basedir = /home/mysql/mysql/
datadir = /usr/local/mysql/mysql/mysql/var/
# tmp dir settings
tmpdir = /home/mysql/mysql/tmp/
slave-load-tmpdir = /home/mysql/mysql/tmp/
#当 slave 执行 load data infile 时用
#language = /home/mysql/mysql/share/mysql/english/
character-sets-dir = /home/mysql/mysql/share/mysql/charsets/
# skip options
skip-name-resolve #grant 时,必须使用 ip 不能使用主机名
skip-symbolic-links #不能使用连接文件
skip-external-locking #不使用系统锁定,要使用 myisamchk, 必须关闭服务器
skip-slave-start #启动 mysql, 不启动复制
#sysdate-is-now
# res settings
back_log = 50 #接受队列,对于没建立 tcp 连接的请求队列放入缓存中,队列大小为 back_log,受限制与 OS 参数
max_connections = 1000 #最大并发连接数 ,增大该值需要相应增加允许打开的文件描述符数
max_connect_errors = 10000 #如果某个用户发起的连接 error 超过该数值,则该用户的下次连接将被阻塞,直到管理员执行 flush hosts ; 命令;防止黑客
#open_files_limit = 10240
connect-timeout = 10 #连接超时之前的最大秒数, 在 Linux 平台上,该超时也用作等待服务器首次回应的时间
wait-timeout = 28800 #等待关闭连接的时间
interactive-timeout = 28800 #关闭连接之前,允许 interactive_timeout(取代了 wait_timeout)秒的不活动时间。客户端的会话 wait_timeout 变量被设为会话 interactive_timeout 变量的值。
slave-net-timeout = 600 #从服务器也能够处理网络连接中断。但是,只有从服务器超过 slave_net_timeout 秒没有从主服务器收到数据才通知网络中断
net_read_timeout = 30 #从服务器读取信息的超时
net_write_timeout = 60 #从服务器写入信息的超时
net_retry_count = 10 #如果某个通信端口的读操作中断了,在放弃前重试多次
net_buffer_length = 16384 #包消息缓冲区初始化为 net_buffer_length 字节,但需要时可以增长到 max_allowed_packet 字节
max_allowed_packet = 64M #
#table_cache = 512 #所有线程打开的表的数目。增大该值可以增加 mysqld 需要的文件描述符的数量
thread_stack = 192K #每个线程的堆栈大小
thread_cache_size = 20 #线程缓存
thread_concurrency = 8 #同时运行的线程的数据 此处最好为 CPU 个数两倍。本机配置为 CPU 的个数
# qcache settings
query_cache_size = 256M #查询缓存大小
query_cache_limit = 2M #不缓存查询大于该值的结果
query_cache_min_res_unit = 2K #查询缓存分配的最小块大小
# default settings
# time zone
default-time-zone = system #服务器时区
character-set-server = utf8 #server 级别字符集
default-storage-engine = InnoDB #默认存储
# tmp & heap
tmp_table_size = 512M #临时表大小,如果超过该值,则结果放到磁盘中
max_heap_table_size = 512M #该变量设置 MEMORY (HEAP) 表可以增长到的最大空间大小
log-bin = mysql-bin #这些路径相对于 datadir
log-bin-index = mysql-bin.index
relayrelay-log = relay-log
relayrelay_log_index = relay-log.index
# warning & error log
log-warnings = 1
log-error = /home/mysql/mysql/log/mysql.err
log_output = FILE #参数 log_output 指定了慢查询输出的格式,默认为 FILE,你可以将它设为 TABLE,然后就可以查询 mysql 架构下的 slow_log 表了
# slow query log
slow_query_log = 1
long-query-time = 1 #慢查询时间 超过 1 秒则为慢查询
slow_query_log_file = /home/mysql/mysql/log/slow.log
#log-queries-not-using-indexes
#log-slow-slave-statements
general_log = 1
general_log_file = /home/mysql/mysql/log/mysql.log
max_binlog_size = 1G
max_relay_log_size = 1G
# if use auto-ex, set to 0
relay-log-purge = 1 #当不用中继日志时,删除他们。这个操作有 SQL 线程完成
# max binlog keeps days
expire_logs_days = 30 #超过 30 天的 binlog 删除
binlog_cache_size = 1M #session 级别
# replication
replicate-wild-ignore-table = mysql.% #复制时忽略数据库及表
replicate-wild-ignore-table = test.% #复制时忽略数据库及表
# slave_skip_errors=all
key_buffer_size = 256M #myisam 索引 buffer, 只有 key 没有 data
sort_buffer_size = 2M #排序 buffer 大小;线程级别
read_buffer_size = 2M #以全表扫描 (Sequential Scan) 方式扫描数据的 buffer 大小 ;线程级别
join_buffer_size = 8M # join buffer 大小; 线程级别
read_rnd_buffer_size = 8M #MyISAM 以索引扫描 (Random Scan) 方式扫描数据的 buffer 大小 ;线程级别
bulk_insert_buffer_size = 64M #MyISAM 用在块插入优化中的树缓冲区的大小。注释:这是一个 per thread 的限制
myisam_sort_buffer_size = 64M #MyISAM 设置恢复表之时使用的缓冲区的尺寸, 当在 REPAIR TABLE 或用 CREATE INDEX 创建索引或 ALTER TABLE 过程中排序 MyISAM 索引分配的缓冲区
myisam_max_sort_file_size = 10G #MyISAM 如果临时文件会变得超过索引,不要使用快速排序索引方法来创建一个索引。注释:这个参数以字节的形式给出. 重建 MyISAM 索引 (在 REPAIR TABLE、ALTER TABLE 或 LOAD DATA INFILE 过程中) 时,允许 MySQL 使用的临时文件的最大空间大小。如果文件的大小超过该值,则使用键值缓存创建索引,要慢得多。该值的单位为字节
myisam_repair_threads = 1 #如果该值大于 1,在 Repair by sorting 过程中并行创建 MyISAM 表索引 (每个索引在自己的线程内)
myisam_recover = 64K# 允许的 GROUP_CONCAT() 函数结果的最大长度
transaction_isolation = REPEATABLE-READ
innodb_file_per_table
#innodb_status_file = 1
#innodb_open_files = 2048
innodb_additional_mem_pool_size = 100M #帧缓存的控制对象需要从此处申请缓存,所以该值与 innodb_buffer_pool 对应
innodb_buffer_pool_size = 2G #包括数据页、索引页、插入缓存、锁信息、自适应哈希所以、数据字典信息
innodb_data_home_dir = /usr/local/mysql/var/
#innodb_data_file_path = ibdata1:1G:autoextend
innodb_data_file_path = ibdata1:500M;ibdata2:2210M:autoextend #表空间
innodb_file_io_threads = 4 #io 线程数
innodb_thread_concurrency = 16 #InnoDB 试着在 InnoDB 内保持操作系统线程的数量少于或等于这个参数给出的限制
innodb_flush_log_at_trx_commit = 1 #每次 commit 日志缓存中的数据刷到磁盘中
innodb_log_buffer_size = 8M #事物日志缓存
innodb_log_file_size = 500M #事物日志大小
#innodb_log_file_size =100M
innodb_log_files_in_group = 2 #两组事物日志
innodb_log_group_home_dir = /usr/local/mysql/mysql/var/# 日志组
innodb_max_dirty_pages_pct = 90 #innodb 主线程刷新缓存池中的数据,使脏数据比例小于 90%
innodb_lock_wait_timeout = 50 #InnoDB 事务在被回滚之前可以等待一个锁定的超时秒数。InnoDB 在它自己的 锁定表中自动检测事务死锁并且回滚事务。InnoDB 用 LOCK TABLES 语句注意到锁定设置。默认值是 50 秒
#innodb_flush_method = O_DSYNC
[mysqldump]
quick
max_allowed_packet = 64M
[mysql]
disable-auto-rehash #允许通过 TAB 键提示
default-character-set = utf8
connect-timeout = 3
MYSQL 部署配置管理 5.6 版本
来源: http://www.bubuko.com/infodetail-2450728.html