欢迎各位兄弟 发布技术文章
这里的技术是共享的
MySQL 最早属于瑞典的 AB 公司,后来被 Sun 收购, Sun 又被 Oracle 收购
96年 MySQL 第一次问世
MySQL
1) Speed 高性能
2) Reliability 稳定性,可靠性
3) Scalability 伸缩性 (有效的数据分区,可以几百台MySQL服务器联合起来工作)
4) Ease of use 易用性
5) Portability and Standards Compliance 体积短小,轻量级
6) Multiuser Support 多用户支持
7) Internationalization 国际化能力,支持众多语言,支持众多的字符编码
8) Wide Application Support 广泛的应用支持
c,c++,java,perl,php,python,ruby
jdbc,odbc,.net 提供这些专用的驱动程序(连接器)
9)Open Source 开源的
mysql 使用量超过了 sql server,紧跟在 Oracle 之后,( 但仅统计商业公司,如果所有公司都统计,会超过 oracle )
alpha: 内测版
Beta: 测试版
GA: General Availability,通用版本,指软件的通用版本。
Subqueries : 子模询 嵌套查询
prepared statement : 预准备语句 准备语句 预备语句;可以编译框架,里面的数据可以进行替换
B-tree and R-tree indexes : B树索引和R树索引
B树索引: 平衡树索引
R树索引: 空间树索引
Stored procedure: 存储过程
cursors: 游标
views: 视图
trigger: 触发器
XA transaction: 分布式事务
Partitioning:数据分区,表如果过大(比如10亿行数据,把一个表中的数据拆分成n份,每一个数据库物理服务器上只负责其中一部分查询);sharing 有相同之处,又有不同之处,很多时候不加区分的使用它们
row-based replication : 基于行的复制 Mysql 还能基于语句的复制,两种模式(基于行的复制,基于语句的复制)进行的混合复制
plug in storage engine API: 本来需要将引擎直接植入进源码编译进行工作,5.1后来,真正提供插件式存储引擎的抽象层,从此以后,切换引擎变得非常简单
event scheduler: 事件调度器
比较主流的稳定版已发展到 5.5 -->5.6
5.5在性能上有很大改进,(至少在windows上性能改进明显)
5.6的时候,引入了多线程复制等新特性
在技术上 mysql 不比 postgresql(postgresql在一些特性,尤其是错误恢复上比mysql强),但是市场决定一切
MySQL Server ( 要关心 ): C/S ,既包括C(mysql),又包括S (mysqld或 mysqld-safe)
MySQL Cluster : Mysql 集群 4节点 99.999在线(一年不超过5分钟当机) 但是基本没有公司使用它
MySQL Proxy ( 要关心 ) : Mysql 代理服务器 Mysql语句路由,前端代理接受用户请求,把请求转发给真正处理的Mysql服务器
(读写分离) , 写服务器专门进行写(创建,删除,修改,增加等等),写服务器根据Mysql自己的内部的复制功能,在内部同步数
据到读服务器,,用户的select查询请求由 读服务器 响应
Mysql 代理还能够分析重写SQL语句,能把用户经常用到的性能比较差的sql语句在服务器上重写为性能比较好的语句(对用户请求进行分析并重写) MySQL Proxy仍然没有为生产环境做完整的测试,不推荐在生产环境中使用,好多商业公司使用 MySQL Proxy 来实现读写分离等功能的
阿里巴巴有个员工好像了实现了类似于 MySQL Proxy的工具
MySQL Administrator (按需定义的) : Mysql 的 GUI 可视化管理工具
MySQL Query Browser (按需定义的) : Mysql 的 查询浏览器
MySQL Workbench (按需定义的) : 数据设计工具
MySQL Migration Toolkit ( 要关心 ) : MySQL 移植工具箱 (能够将 access (sql server ) 数据库导入到mysql中去,反之,也可以)(可在mysql不同版本,不同平台(window linux)之间移值数据)
MySQL Embedded Server : 嵌入式环境中专用的(工作地址小,内存地址小)在可获取的资源量很小的情况下,只提供基本的功能
MySQL Drivers and Connectors ( 要关心 ) : 驱动和连接器
商业版(企业版): 提供了更增强的监控工具,更增强的商业级的工具
我们不依赖于这些工具,也能完成相应的工作
使用企业版的公司太少了
社区版(免费版):对绝大多部公司来讲,够用
Percona 为 Mysql 提供性能优化的著名的组织,里面提供了Mysql的性能博客,提出了Mysql的性能改进,
里面有许许多多有价值的文章,关于性能优化的内容,大多数来自 Percona,应经常关注Percona的站点
https://www.percona.com/community-blog/
MySQL安装:
专用软件包管理器包
deb(dig或ubunt上用的),rpm(红帽 Cento Suse上用的)
rpm:
RHEL(Oracle Linux),CentOS
SUSE
rpm 包 也有两种,一种是红帽操作系统做的,另一种是Mysql官方做的
通用二进制格式包
gcc,icc 在某一个通用平台上使用 gcc (geno的C编译器)或icc (因特尔的C编译器) 编译器编译的 ,一般我们使用gcc的
gcc: x86(i386或i686格式),x64(64格式的),(sun的spark平台的版本)
源代码
5.5之前(不含5.5),一般使用make编译(./configure, make, make install)
5.5之后(含5.5),不使用make,使用 cmake (c就是 cross platform 跨平台) 跨平台的编译器,不依赖于平台来进行编译
cmake(针对同一个源代码树,编译多个不同的版本,可以编译32位,或64位, 或 power pc 版本,编译后的结果,其位置与源码不在同一个位置)
5.6比5.5特性,性能更强,当然低版本(5.5)更稳定
红帽5上未提供cmake,需额外安装cmake编译器,红帽6.0及之后默认提供cmake
MySQL-client: mysql ,mysqladmin 等等
MySQL-debuginfo: 当客户端或服务器端有问题时,打开调试代码追踪代码执行的(一般只有开发人员才用得上,高级的dba,追踪,分析mysql性能问题时)
MySQL-devel: 开发组件(开发时用到的头文件,库文件,才用得上)(二次开发,针对mysql开发其它产品,都有可能用得上)(如果编译一个软件,这个软件依赖于mysql的话,必须安装这个mysql-devel)
MySQL-embedded: 嵌入式环境中专用的 (红帽系统上,装mysql服务器,平时用不上它)
MySQL-ndb-management: MySQL集群服务器上专用的 ndb(name db) (平时也用不上)
MySQL-server: 服务器端
MySQL-shared: 共享库,(MySQL-client,MySQL-server都有可能用到)
MySQL-shared-compat: 兼容比较老的mysql客户端服务器端工具而专门提供的兼容库,是MySQL-shared的补充
MySQL-test: 测试组件
MySQL-VERSION.PLATFORM.src.rpm: 源码格式的rpm包
所以我们要装 MySQL-client,MySQL-devel,Mysql-server,MySQL-shared,MySQL-shared-compat 一般就够了,偶尔需要装 MySQL-test
Mysql安装后的目录结构
bin: Mysql 各种二进制程序,包括服务器端客户端
data: 数据目录
include: 头文件
lib: 库文件
man: 手册
mysql-test: 测试组件
scripts: 初始化脚本( 只有一个脚本 master install db , 初始化 mysql 字典的, 初始化 mysql 的控制信息数据库 mysql )
share: 每一种相关信息(错误)的不同语言版本
sql-bench: 基本性能测试所用到的工具包(安装完mysql,测它的响应能力,负载能力)
support-files: 给mysql提供启动服务脚本,主配置文件,主配置文件的样例等等
Mysql 安装完成后,如何完成初始配置的
mysql安装完成后,必须初始化,完成配置
mysql 中心配置文件 my.cnf,
[mysql] #只对mysql这个程序生效,只为mysql这个组件客户端使用
................
[mysqld] #只对mysqld这个程序生效 服务器端
................
[client] # 只对client这个程序生效 客户端;为众多客户端组件共同使用的
................
mysql从哪个路径找配置文件 到下列多个路径找 ,按顺序找的
在类Unix(包括linux)
1)/etc/my.cnf
2)/etc/mysql/my.cnf
3)$MYSQL_HOME/my.cnf # mysql家目录(实例运行目录)
一个物理服务器上,可以提供多个web虚拟主机,也可以提供多个不同的mysql服务器,只要它们监听在不同的端口上(每一个工作在不同端口上的mysql服务,我们称为mysql实例,每一个实例都有它自己的运行目录,都叫做 $MYSQL_HOME )
4)/path/to/file 启动mysql的时候,可以通过 defaults-extra-file=/path/to/file 指定额外的配置文件
5)~/my.cnf 用户家目录下的 my.cnf , 运行mysql用户服务器的用户就叫做 mysql,如果 mysql 没有家目录的话, 就找不到它
每次mysql启动的时候,它都会读取这四个或五个文件
若多个文件有重复的配置,那么最后一次读取的配置会生效
所以 5)优先级最高 1)优先级最低
mysql 在 windows 上加载配置文件的顺序
1) %WINDIR%\my.ini,%WINDIR%\my.cnf
2) C:\my.ini,C:\my.cnf
3) %INSTALLDIR%\my.ini, %INSTALDIR%\my.cnf
4) /path/to/file 启动mysql的时候,可以通过 defaults-extra-file=/path/to/file 指定额外的配置文件
mysql 安装完成后进行的操作
mysql 安装完成后 默认生成5个用户,
三个root
root@127.0.0.1 root@localhot root@hostname
密码默认就是空的
两个anonymous
''@localhot ''@hostname
匿名不安全,我们应该删除
drop user 用户名@主机名 #删除用户
Mysql 密码修改方法有三种
1) 改密码: mysqladmin -u root password 'new-password' -p # password 是 mysql 的一个子命令,专门用来设定密码的 (-p 是指定老密码,如果以前是空密码-p也不用指了) 一般此命令完成后会自动重读授权表,
改密码: mysqladmin -u root -h this_host_name password 'new-password' -p
2)mysql> SET PASSWORD FOR 'USERNAME'@'HOST'=PASSWORD('new_pass') 一般此命令完成后会自动重读授权表,
3)mysql> UPDATE mysql.user SET PASSWORD=PASSWORD('new_pass') WHERE CONDITION;
> FLUSH PRIVILEGES; 告诉mysql,去重读授权表,
MySQL安装:
源码安装MySQL (5.5)
cmake ( 先安装它 ) ( 红帽6才 cmake , 红帽5上是没有的 )
编译安装 cmake (使用 make工具安装, 开发环境,开发工具?)
安装 Mysql时
1)数据要安装在独立的目录,最好把数据安装在独立的LVM(逻辑卷)上
2)准备用户
3)把数据目录的属主属组改为 mysql用户
4)编译安装mysql
1)
./configure cmake .
./configure --help cmake . -LH or ccmake
2)
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql cmake 编译软件时,指定的软件的安装路径(编译mysql时,默认就是它)
-DMYSQL_DATADIR=/data/mysql 数据文件的路径 ( 默认是 /usr/local/mysql/data )
-DSYSCONFDIR=/etc 配置文件的路径
Mysql 5.5 上默认的存储引擎: csv myisam myisammrg heap ( 5.6上默认包含 innodb )
编译存储引擎
-DWITH_INNOBASE_STORAGE_ENGINE=1 #编译的时候,使用INNODB存储引擎 (5.5上应该装进来,尤其是它)
-DWITH_ARCHIVE_STORAGE_ENGINE=1 # (5.5上应该装进来)
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 #黑洞存储引擎 (5.5上应该装进来)
-DWITH_FEDERATED_STORAGE_ENGINE=1 #联合存储引擎 (应该是5.5中不支持?不知道,倒底支不支持)
不编译存储引擎
-DWITHOUT_<ENGINE>_STORAGE_ENGINE=1
比如:
-DWITHOUT_EXAMPLE_STORAGE_ENGINE=1
-DWITHOUT_BLACKHOLE_STORAGE_ENGINE=1
-DWITHOUT_PARTITION_STORAGE_ENGINE=1
-DWITH_READLINE=1 # 能够使用 load in file 这种方式来批量导入 mysql 数据的(非常重要,应该包含)
-DWITH_SSL=system # 支持基于 ssl 的会话,实现复制的功能至关重要 (应该包含)
-DWITH_ZLIB=system # 压缩库,可以根据系统进行选择
-DWITH_LIBWRAP=0 # 编译 mysql 的时候,针对 tcpwrapper 进行编译,意味着 mysql 是可以通过tcpwrapper来进行控制的 ( 对于msyql这样复杂的数据库来讲,这个不需要编译 )
-DMYSQL_TCP_PORT=3306 设置默认端口的
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock MySQL进程间通信的套接字的位置
-DENABLED_LOCAL_INFILE=1 是否启动本地的LOCAL_INFILE
-DEXTRA_CHARSETS=all 支持哪些额外的字符集
-DDEFAULT_CHARSET=utf8 默认字符集
-DDEFAULT_COLLATION=utf8_general_ci 默认的字符集排序规则 (就算是utf-8中文,可能按笔画排序,可能按拼音排序)
-DWITH_DEBUG=0 是否启动DEBUG功能
-DENABLE_PROFILING=1 是否启用性能分析功能
看看开发环境 开发库
https://download.csdn.net/download/u012181236/9550772
https://github.com/Kitware/CMake/releases?after=v3.17.3
https://cmake.org/cmake/help/latest/release/index.html
以上都可以下载 历史版本 cmake
https://downloads.mysql.com/archives/community/
https://dev.mysql.com/downloads/mysql/
下载历史版本 mysql 上面是rpm,源码包都有
https://downloads.mysql.com/archives/get/p/23/file/mysql-5.5.28.tar.gz
[root@mail ~]# man hwclock
[root@mail ~]# hwclock -s
[root@mail ~]# tar xf cmake-2.8.8.tar.gz
[root@mail ~]# tar -xf mysql-5.5.28.tar.gz
[root@mail ~]# cd cmake-2.8.8
[root@mail cmake-2.8.8]#
[root@mail cmake-2.8.8]# ./configure --help | less
[root@mail cmake-2.8.8]# ./configure
......................
......................
......................
应该默认装在 /usr/local/bin 吧
[root@mail cmake-2.8.8]# make && make install
创建逻辑卷 (我的电脑上 不能建逻辑器,看马哥的吧)
有人说mysql数据 放在 fxs 文件系统上性能最好
lost+found 说明是一个新分区
[root@mail data]# cd
[root@mail ~]# cd /mydata/data
[root@mail data]#
[root@mail data]# chown -R mysql:mysql /mydata/data
[root@mail data]#
[root@mail ~]# which cmake
/usr/local/bin/cmake
[root@mail ~]# echo $PATH
/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/apache/bin:/usr/local/mysql/bin:/root/bin
[root@mail ~]#
[root@mail ~]# cd mysql-5.5.28
[root@mail mysql-5.5.28]# pwd
/root/mysql-5.5.28
[root@mail mysql-5.5.28]#
[root@mail mysql-5.5.28]# cmake . -LH #是看帮助命令 比下面命令更好 (尝试编译,读取配置选项)
或者
[root@mail mysql-5.5.28]# ccmake . #也是看帮助命令
cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \ #安装路径
-DMYSQL_DATADIR=/mydata/data \ #数据路径
-DSYSCONFDIR=/etc \ #配置文件路径
-DWITH_INNOBASE_STORAGE_ENGINE=1 \ #innodb存储引擎
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \ #archive存储引擎
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \ #黑洞存储引擎 相当于/dev/null 偶尔比如中继复制时有用
-DWITH_PARTITION_STORAGE_ENGINE=1\
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1\
-DWITHOUT_EXAMPLE_STORAGE_ENGINE=1 \
-DWITHOUT_FEDERATED_STORAGE_ENGINE=1 \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_EXTRA_CHARSETS=all \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_READLINE=1 \
-DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \ # unix套接字路径
-DMYSQL_TCP_PORT=3306 \
-DMYSQL_USER=mysql \
-DCOMPILATION_COMMENT="lq-edition"\
-DWITH_BOOST=/usr/local/boost \
-DENABLE_DTRACE=0 \
-DOPTIMIZER_TRACE=1\
-DWITH_DEBUG=1
上面其实默认都有,不加也没关系
[root@mail mysql-5.5.28]# cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/mydata/data \
-DSYSCONFDIR=/etc \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_READLINE=1 \
-DWITH_SSL=system \
-DWITH_ZLIB=system \
-DWITH_LIBWRAP=0 \
-DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \
-DDEFAULT_CHARSET=utf8 \ # 这个马哥没加,我也不加吧
-DDEFAULT_COLLATION=utf8_general_ci \ # 这个马哥没加,我也不加吧
[root@mail mysql-5.5.28]# make
[root@mail mysql-5.5.28]# make install
mysql 是C/S的
本地通信,是套接字 socket
非本地通信(哪怕可能用的是本机的ip地址,只要不是本地回环地址127.0.0.1),也是 tcp/ip通信
mysql三个组件, 服务器端工具,客户端工具,非客户端工具
mysql客户端工具
MySQL客户端工具:
mysql
mysqldump
mysqladmin
mysqlcheck
mysqlimport
[client] #配置文件client段对它们生效
客户端工具选项几乎相同 ,都有长选项
-u USERNAME (--username)
-h HOST (--host)
-p '' #密码 (--password)
--protocol {tcp|socket|pipe|memory} # socket是linux上 pipe|memory是windows上
--port PORT #端口
MySQL非客户端组件:
MySQL非客户端组件(工具):
myisamchk #检查myisam表
myisampack #打包压缩myisam表
[root@mail mysql-5.5.28]# cd /usr/local/mysql
这里安装完成的结果,与通用二进制格式安装以后的结果基本是一样的
[root@mail mysql]#
[root@mail mysql]# ls
bin data include lib mysql-test scripts sql-bench
COPYING docs INSTALL-BINARY man README share support-files
[root@mail mysql]#
[root@mail mysql]# ll
总计 132
drwxr-xr-x 2 root root 4096 09-15 12:27 bin
-rw-r--r-- 1 root root 17987 2012-08-29 COPYING
drwxr-xr-x 4 root root 4096 09-15 12:26 data
drwxr-xr-x 2 root root 4096 09-15 12:26 docs
drwxr-xr-x 3 root root 4096 09-15 12:26 include
-rw-r--r-- 1 root root 7604 2012-08-29 INSTALL-BINARY
drwxr-xr-x 3 root root 4096 09-15 12:27 lib
drwxr-xr-x 4 root root 4096 09-15 12:27 man
drwxr-xr-x 10 root root 4096 09-15 12:27 mysql-test
-rw-r--r-- 1 root root 2552 2012-08-29 README
drwxr-xr-x 2 root root 4096 09-15 12:27 scripts
drwxr-xr-x 27 root root 4096 09-15 12:27 share
drwxr-xr-x 4 root root 4096 09-15 12:27 sql-bench
drwxr-xr-x 2 root root 4096 09-15 12:27 support-files
[root@mail mysql]#
[root@mail mysql]# chown -R :mysql /usr/local/mysql #属主改为mysql
[root@mail mysql]#
初始化 mysql 数据库
[root@mail mysql]# scripts/mysql_install_db --user=mysql --datadir=/mydata/data
复制配置文件
[root@mail mysql]# cp support-files/my-large.cnf /etc/my.cnf
[root@mail mysql]#
复制启动进程脚本文件
[root@mail mysql]# cp support-files/mysql.server /etc/init.d/mysqld
[root@mail mysql]#
加到服务列表中去
[root@mail mysql]# chkconfig --add mysqld
[root@mail mysql]#
看看 mysqld 在什么情况下启动 2 3 4 5 是 on
[root@mail mysql]# chkconfig --list mysqld
mysqld 0:关闭 1:关闭 2:启用 3:启用 4:启用 5:启用 6:关闭
[root@mail mysql]#
启动 mysql
[root@mail mysql]# service mysqld start
Starting MySQL..The server quit without updating PID file (/mydata/data/mail.magedu.com.pid). [失败]
到 /mydata/data 目录看看错误日志 mail.magedu.com.err
[root@mail mysql]#
[root@mail data]# tail mail.magedu.com.err #看下面,原来还有一个mysqld ,,我们本来是卸载掉它的,它这个服务还未停止,
# 我们就 重启下电脑吧
200915 13:13:37 [Note] Server socket created on IP: '0.0.0.0'.
200915 13:13:37 [ERROR] Can't start server : Bind on unix socket: Permission den
200915 13:13:37 [ERROR] Do you already have another mysqld server running on soc
200915 13:13:37 [ERROR] Aborting
200915 13:13:37 InnoDB: Starting shutdown...
200915 13:13:38 InnoDB: Shutdown completed; log sequence number 1595675
200915 13:13:38 [Note] /usr/local/mysql/bin/mysqld: Shutdown complete
200915 13:13:38 mysqld_safe mysqld from pid file /mydata/data/mail.magedu.com.pi
[root@mail data]# tail -1000 /mydata/data/mail.magedu.com.err
# 看到这里 权限拒绝
[root@mail local]# chown -R mysql:mysql /usr/local/mysql
[root@mail local]# chown -R mysql:mysql /mydata/data/
上面两个命令执行后,mysql就能启动了
[root@mail local]# service mysqld restart
MySQL server PID file could not be found! [失败]
Starting MySQL.. [确定]
把mysql命令路径直接加到环境变量中
[root@mail data]# vim /etc/profile.d/mysql.sh
export PATH=$PATH:/usr/local/mysql/bin
执行此脚本,让它即时生效
[root@mail data]# . /etc/profile.d/mysql.sh
[root@mail data]#
[root@mail data]# echo $PATH
/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/apache/bin:/usr/local/mysql/bin:/root/bin:/usr/local/mysql/bin
[root@mail data]#
[root@mail data]# mysql
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.5.28-log Source distribution
Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| test |
+--------------------+
4 rows in set (0.00 sec)
mysql>
mysql> show engines; #显示存储引擎
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine | Support | Comment | Transactions | XA | Savepoints |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO |
| PERFORMANCE_SCHEMA | YES | Performance Schema | NO | NO | NO |
| MyISAM | YES | MyISAM storage engine | NO | NO | NO |
| BLACKHOLE | YES | /dev/null storage engine (anything you write to it disappears) | NO | NO | NO |
| CSV | YES | CSV storage engine | NO | NO | NO |
| InnoDB | DEFAULT | Supports transactions, row-level locking, and foreign keys | YES | YES | YES |
| ARCHIVE | YES | Archive storage engine | NO | NO | NO |
| MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
8 rows in set (0.00 sec)
mysql>
[root@mail data]# vim /etc/my.cnf
thread_concurrency = 8 # 最好为内核个数的双倍,性能更好
datadir = /mydata/data #源码安装,不指定不会报错,通用二进制格式不指定就会报错了
[root@mail data]# mysql
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.5.28-log Source distribution
Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
#下面代码是删除两个用户
mysql> DROP USER ''@localhost;
mysql> DROP USER ''@'127.0.0.1';
ERROR 1396 (HY000): Operation DROP USER failed for ''@'127.0.0.1'
mysql>
mysql> select User,Host,Password FROM user;
+------+-----------------+----------+
| User | Host | Password |
+------+-----------------+----------+
| root | localhost | |
| root | mail.magedu.com | |
| root | 127.0.0.1 | |
| root | ::1 | | # ipv6的本地回环用户
| | mail.magedu.com | |
+------+-----------------+----------+
5 rows in set (0.00 sec)
mysql>
mysql> DROP USER ''@mail.magedu.com;
Query OK, 0 rows affected (0.00 sec)
mysql>
mysql> DROP USER 'root'@'::1';
Query OK, 0 rows affected (0.00 sec)
mysql>
mysql> select User,Host,Password FROM user;
+------+-----------------+----------+
| User | Host | Password |
+------+-----------------+----------+
| root | localhost | |
| root | mail.magedu.com | |
| root | 127.0.0.1 | |
+------+-----------------+----------+
3 rows in set (0.00 sec)
# 这里的Host 指的是客户端,即允许哪些客户端
mysql>
mysql> UPDATE user SET Password=PASSWORD('111111') where user='root'; #三个同时改
Query OK, 0 rows affected (0.00 sec)
Rows matched: 3 Changed: 0 Warnings: 0
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
mysql>
mysql> QUIT;
Bye
[root@mail data]#
[root@mail data]# mysql #因为有了密码 所以此时连不上了
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
[root@mail data]#
[root@mail data]# mysql -uroot -h192.168.0.75 -p #连不上,因为只允许本机连接
Enter password:
ERROR 1130 (HY000): Host '192.168.0.75' is not allowed to connect to this MySQL server
[root@mail data]#
[root@mail data]# mysql -uroot -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 5.5.28-log Source distribution
Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
自己直接使用 mysql (不用用户名和密码)
.my.cnf 在家目录下(root家目录),是隐藏文件,不能让别人有权限访问
[root@mail ~]# vim .my.cnf
[client]
user=root
password=zhong1926
host=localhost
[root@mail ~]# mysql #此时mysql直接连进来了 (虽然它有密码)
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 10
Server version: 5.5.28-log Source distribution
Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
[root@mail ~]# cd /mydata/data
[root@mail data]# ls # 每个数据库都有个目录
ibdata1 mysql-bin.000001 mysql-bin.000007 mysql-bin.000013 mysql-bin.000019
ib_logfile0 mysql-bin.000002 mysql-bin.000008 mysql-bin.000014 mysql-bin.index
ib_logfile1 mysql-bin.000003 mysql-bin.000009 mysql-bin.000015 performance_schema
mail.magedu.com.err mysql-bin.000004 mysql-bin.000010 mysql-bin.000016 test
mail.magedu.com.pid mysql-bin.000005 mysql-bin.000011 mysql-bin.000017
mysql mysql-bin.000006 mysql-bin.000012 mysql-bin.000018
[root@mail mysql]# pwd
/mydata/data/mysql
[root@mail mysql]#
[root@mail data]# cd mysql
[root@mail mysql]# ls
columns_priv.frm help_keyword.frm proc.frm time_zone.frm
columns_priv.MYD help_keyword.MYD proc.MYD time_zone_leap_second.frm
columns_priv.MYI help_keyword.MYI proc.MYI time_zone_leap_second.MYD
db.frm help_relation.frm procs_priv.frm time_zone_leap_second.MYI
db.MYD help_relation.MYD procs_priv.MYD time_zone.MYD
db.MYI help_relation.MYI procs_priv.MYI time_zone.MYI
event.frm help_topic.frm proxies_priv.frm time_zone_name.frm
event.MYD help_topic.MYD proxies_priv.MYD time_zone_name.MYD
event.MYI help_topic.MYI proxies_priv.MYI time_zone_name.MYI
func.frm host.frm servers.frm time_zone_transition.frm
func.MYD host.MYD servers.MYD time_zone_transition.MYD
func.MYI host.MYI servers.MYI time_zone_transition.MYI
general_log.CSM ndb_binlog_index.frm slow_log.CSM time_zone_transition_type.frm
general_log.CSV ndb_binlog_index.MYD slow_log.CSV time_zone_transition_type.MYD
general_log.frm ndb_binlog_index.MYI slow_log.frm time_zone_transition_type.MYI
help_category.frm plugin.frm tables_priv.frm user.frm
help_category.MYD plugin.MYD tables_priv.MYD user.MYD
help_category.MYI plugin.MYI tables_priv.MYI user.MYI
[root@mail mysql]#
对于MyISAM引擎来说:
每表三个文件
.frm 是表结构定义
.MYD 就是 data 数据
.MYI 是索引
InnoDB:
每表都有表定义,,所有表数据放在一个单独的表空间当中(同一个文件里面),(可以定义为每表单独的表空间文件)
所有表共享一个表空间文件
建议每表一个独立的表空间文件
.frm 是表结构定义
.ibd 表空间 (表数据和表索引)
.opt 默认字符集和排序规则的定义
[root@mail mysql]# mysql
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 11
Server version: 5.5.28-log Source distribution
Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> show variables like '%innobd%' ;
Empty set (0.00 sec)
mysql>
mysql> show variables like '%innodb%' ; #会话变量
# show global variables like '%innodb%' ; 全局变量
# innodb_file_per_table 是 OFF ;可以临时有效改成ON,想永久生效,
[mysqld] 下面
innodb_file_per_table = 1 # (ON)
[root@mail local]# vim /etc/my.cnf
[mysqld]
innodb_file_per_table = 1
[root@mail local]# service mysqld restart
Shutting down MySQL... [确定]
Starting MySQL.. [确定]
[root@mail local]#
[root@mail mysql]# mysql
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 11
Server version: 5.5.28-log Source distribution
Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> show variables like '%innobd%' ;
# 此时 innodb_file_per_table 是 ON
大部分选项 可以直接修改,不用重启服务器的
mysql> create database mydb;
Query OK, 1 row affected (0.00 sec)
mysql> create table testdb(
-> id int not null,
-> name char(30));
Query OK, 0 rows affected (0.02 sec)
mysql>
[root@mail mysql]# pwd
/mydata/data/mysql
[root@mail mysql]# cd ..
[root@mail data]# pwd
/mydata/data
[root@mail data]# ls # 有个叫mydb 的数据库
ibdata1 mysql mysql-bin.000006 mysql-bin.000012 mysql-bin.000018
ib_logfile0 mysql-bin.000001 mysql-bin.000007 mysql-bin.000013 mysql-bin.000019
ib_logfile1 mysql-bin.000002 mysql-bin.000008 mysql-bin.000014 mysql-bin.000020
mail.magedu.com.err mysql-bin.000003 mysql-bin.000009 mysql-bin.000015 mysql-bin.index
mail.magedu.com.pid mysql-bin.000004 mysql-bin.000010 mysql-bin.000016 performance_schema
mydb mysql-bin.000005 mysql-bin.000011 mysql-bin.000017 test
[root@mail data]#
[root@mail data]# cd mydb
[root@mail mydb]# pwd
/mydata/data/mydb
[root@mail mydb]# ls
db.opt testdb.frm testdb.ibd
[root@mail mydb]#
[root@mail mydb]# ls -lh
总计 128K
-rw-rw---- 1 mysql mysql 65 09-15 16:01 db.opt
-rw-rw---- 1 mysql mysql 8.4K 09-15 16:03 testdb.frm
-rw-rw---- 1 mysql mysql 96K 09-15 16:03 testdb.ibd #它有初始数据的
[root@mail mydb]#
[root@mail mydb]# file db.opt
db.opt: ASCII text
[root@mail mydb]# cat db.opt
default-character-set=latin1
default-collation=latin1_swedish_ci
[root@mail mydb]#