这篇文章,希望达到的目标 。
1. 所有从业者,入门Mysql,只需这一篇文章即可 。
2. 实际安装部署、使用过程中,遇到的问题,可随时通过查阅此文章,解决 。
至于是否达到如上两目标,且往下看 。
本文,以Mysql为例 。
文章略长,建议 收藏 + 转发,随时慢慢看 。
/
分别从9个小点去阐述 ,慢慢看 。
写这类整合文章,非常不容易,很耗时间,希望对你有帮助 。
/
- 0 -
开始之前,你得先对你自己得服务器有一些基本了解 。
查看当前服务器的内核版本和发行版:
查看发行版:
[root@iZ94b31ttqsZ ~]# cat /etc/issue
CentOS release 6.5 (Final)
查看内核版本:
[root@iZ94b31ttqsZ ~]# uname -a
Linux iZ94b31ttqsZ 2.6.32-431.23.3.el6.x86_64 #1 SMP Thu Jul 31 17:20:51 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
[root@iZ94b31ttqsZ ~]#
如上老徐只是简单示例,具体查看的方法有很多种,可以看看此文http://www.jianshu.com/p/1a7b29fee7f2
为什么先让大家做如上两个操作呢?
多数同学,部署各类软件不成功:要么安装包下载的不对,要么安装步骤操作、姿势不对 。
只有知道了系统的版本,才能下载对应的正确安装包;至于安装步骤,下面会详细讲解。
从如上信息可看到,老徐的系统的,Centos 6.5 ,64位系统 。
/
- 1 -
Mysql安装部署
1)检查系统自带的Mysql,并卸载自带的版本
Step1: 检测系统是否自带安装mysql
[root@localhost ~]# yum list installed |grep mysql
mysql-libs.x86_64 5.1.66-2.el6_3 @anaconda-CentOS-201303020151.x86_64/6.4
Step2: 删除系统自带的mysql及其依赖 命令:
[root@localhost ~]# yum list installed |grep mysql
mysql-libs.x86_64 5.1.66-2.el6_3 @anaconda-CentOS-201303020151.x86_64/6.4
[root@localhost ~]# yum -y remove mysql-libs.x86_64
Loaded plugins: fastestmirror
Setting up Remove Process
~~~~~
由于公众号文章不能超过20000字,此处省略n字...
~~~~~
Removed:
mysql-libs.x86_64 0:5.1.66-2.el6_3
Dependency Removed:
cronie.x86_64 0:1.4.4-7.el6 cronie-anacron.x86_64 0:1.4.4-7.el6 crontabs.noarch 0:1.10-33.el6 postfix.x86_64 2:2.6.6-2.2.el6_1
Complete!
OK,如上是卸载过程 。
再次执行yum list installed |grep mysql
你会发现,已经卸载成功,无任何信息 。
Mysql安装部署全过程实操 。
为了照顾各种不同基础的同学,分享的是一种最简单的安装方式,yum安装 。
但是,一般情况下,默认的yum源版本,并不是我们需要的 。
So ,有如下一系列操作,跟着老徐的文章,一步步操作吧 。
亲测,完全可以成功部署 。
部署版本:Centos 6.5 + Mysql 5.7
给CentOS添加rpm源,并且选择较新的源 命令:
假设当前所在的目录:/etc/software
1)执行命令:
wget dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm --no-check-certificate
如下是执行过程:
--2016-09-24 22:05:51-- http://dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm
正在解析主机 dev.mysql.com... 137.254.60.11
正在连接 dev.mysql.com|137.254.60.11|:80... 已连接。
已发出 HTTP 请求,正在等待回应... 302 Found
位置:http://repo.mysql.com//mysql-community-release-el6-5.noarch.rpm [跟随至新的 URL]
--2016-09-24 22:05:51-- http://repo.mysql.com//mysql-community-release-el6-5.noarch.rpm
正在解析主机 repo.mysql.com... 184.50.14.132
正在连接 repo.mysql.com|184.50.14.132|:80... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度:5824 (5.7K) [application/x-redhat-package-manager]
正在保存至: “mysql-community-release-el6-5.noarch.rpm”
100%[====================================================================================================>] 5,824 --.-K/s in 0s
2016-09-24 22:05:52 (221 MB/s) - 已保存 “mysql-community-release-el6-5.noarch.rpm” [5824/5824])
如果显示如上信息,表示包下载成功 。
可以验证下,执行:
ls /etc/software
可以看到rpm包
2)执行命令:
yum localinstall mysql-community-release-el6-5.noarch.rpm
Loaded plugins: fastestmirror
Setting up Local Package Process
Examining mysql-community-release-el6-5.noarch.rpm: mysql-community-release-el6-5.noarch
Marking mysql-community-release-el6-5.noarch.rpm to be installed
Determining fastest mirrors
~~~~~
由于公众号文章不能超过20000字,此处省略n字...
~~~~~
Installing : mysql-community-release-el6-5.noarch 1/1
Verifying : mysql-community-release-el6-5.noarch 1/1
Installed:
mysql-community-release.noarch 0:el6-5
Complete!
如果显示如上信息,表示包下载成功 。
3)验证本地mysql yum源是否安装成功 。
执行:
yum repolist all | grep mysql
[root@localhost webserver]# yum repolist all | grep mysql
mysql-connectors-community MySQL Connectors Community enabled: 21
mysql-connectors-community-source MySQL Connectors Community - So disabled
mysql-tools-community MySQL Tools Community enabled: 38
mysql-tools-community-source MySQL Tools Community - Source disabled
mysql55-community MySQL 5.5 Community Server disabled
mysql55-community-source MySQL 5.5 Community Server - So disabled
mysql56-community MySQL 5.6 Community Server enabled: 299
mysql56-community-source MySQL 5.6 Community Server - So disabled
mysql57-community-dmr MySQL 5.7 Community Server Deve disabled
mysql57-community-dmr-source MySQL 5.7 Community Server Deve disabled
如上,默认是5.6版本可用,如果想安装5.7怎么操作?
有如下两个方法:
方法一:
执行:
yum-config-manager --disable mysql56-community
yum-config-manager --enable mysql57-community-dmr
如上操作,是把5.6禁用,把5.7启用
此法,会有异常情况:
如果执行命令出现如下错误:
-bash: yum-config-manager: command not found
可用执行如下命令解决,然后继续上面的操作命令:
yum -y install yum-utils
注意:如上操作可能有一部分同学的会出现一些问题;好处是操作简单,两个命令搞定~
如果有问题,底部给老徐留言~
方法二:
直接编辑配置文件,简单、直接,基本不会出现错误~
vi /etc/yum.repos.d/mysql-community.repo
把5.6的enabled=0
把5.7的enabled=1
然后保存就ok
# Enable to use MySQL 5.5
[mysql55-community]
name=MySQL 5.5 Community Server
baseurl=http://repo.mysql.com/yum/mysql-5.5-community/el/6/$basearch/
enabled=0
gpgcheck=1
gpgkey=file:/etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
# Enable to use MySQL 5.6
[mysql56-community]
name=MySQL 5.6 Community Server
baseurl=http://repo.mysql.com/yum/mysql-5.6-community/el/6/$basearch/
enabled=0
gpgcheck=1
gpgkey=file:/etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
# Note: MySQL 5.7 is currently in development. For use at your own risk.
# Please read with sub pages: https://dev.mysql.com/doc/relnotes/mysql/5.7/en/
[mysql57-community-dmr]
name=MySQL 5.7 Community Server Development Milestone Release
baseurl=http://repo.mysql.com/yum/mysql-5.7-community/el/6/$basearch/
enabled=1
gpgcheck=1
gpgkey=file:/etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
如上,颜色标记处 。
此时,再执行:
yum repolist all | grep mysql
就可以看到,5.7是启用的
[root@localhost webserver]# yum repolist all | grep mysql
mysql-connectors-community MySQL Connectors Community 启用: 21
mysql-connectors-community-source MySQL Connectors Community - Sourc 禁用
mysql-tools-community MySQL Tools Community 启用: 38
mysql-tools-community-source MySQL Tools Community - Source 禁用
mysql55-community MySQL 5.5 Community Server 禁用
mysql55-community-source MySQL 5.5 Community Server - Sourc 禁用
mysql56-community MySQL 5.6 Community Server 禁用
mysql56-community-source MySQL 5.6 Community Server - Sourc 禁用
mysql57-community-dmr MySQL 5.7 Community Server Develop 启用: 130
mysql57-community-dmr-source MySQL 5.7 Community Server Develop 禁用
如上 。
OK,至此,基础准备工作完成 。
4)开始用yum方式,直接安装mysql
执行如下命令:
yum install mysql-community-server
已加载插件:fastestmirror
设置安装进程
Loading mirror speeds from cached hostfile
* base: mirrors.163.com
* extras: mirrors.163.com
* updates: mirrors.aliyun.com
解决依赖关系
--> 执行事务检查
---> Package mysql-community-server.x86_64 0:5.7.15-1.el6 will be 安装
--> 处理依赖关系 mysql-community-common(x86-64) = 5.7.15-1.el6,它被软件包 mysql-community-server-5.7.15-1.el6.x86_64 需要
--> 处理依赖关系 mysql-community-client(x86-64) >= 5.7.9,它被软件包 mysql-community-server-5.7.15-1.el6.x86_64 需要
~~~~~
由于公众号文章不能超过20000字,此处省略n字...
~~~~~
总下载量:169 M
Installed size: 842 M
确定吗?[y/N]:y
下载软件包:
(1/5): mysql-community-client-5.7.15-1.el6.x86_64.rpm (0%) 3% [=-
安装过程如上,下载包可能需要点时间,坐等即可 。
可以看到,安装的版本正是我们需要的5.7
5)启动mysql
执行:
service mysqld start
注:如果启动不成功,试试 /etc/rc.d/init.d/mysqld start
启动成功后,查询下状态 /etc/rc.d/init.d/mysqld status
/etc/rc.d/init.d/mysqld status
mysqld (pid 10429) is running...
6)查看mysql是否自启动,并且设置开启自启动 命令:
分别执行如下两个命令:
chkconfig --list | grep mysqld
chkconfig mysqld on
OK ,到这里,整个安装过程,就完成了 。
/
补充几个常见问题(容易掉的坑) 。
1. 登陆mysql时,报错 。
如这类错误,
[root@localhost software]# mysql -uroot -p
Enter password:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
一般原因,
检查mysql是否启动
/etc/rc.d/init.d/mysqld status
如果没有启动,则 /etc/rc.d/init.d/mysqld start
2. 安装了mysql5.7之后初始密码不再默认为空
1.查看初始密码:
[root@localhost software]# grep 'temporary password' /var/log/mysqld.log
2018-01-08T14:09:48.510184Z 1 [Note] A temporary password is generated for root@localhost: YOIzl#puv3;a
[root@localhost software]#
即初始密码为 YOIzl#puv3;a (密码是随机产生的,每台机器产生的都不一样哦)
3. 登录之后 第一步必须先修改密码,
否则其他操作都执行不了。
如下
mysql> show databases;
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
4. 修改密码的方法:
alter user root@localhost identified by 'passwd';
新修改的密码中 必须包含 大小写字母数字及符号
# 'passwd' 里,填写你的新密码 。
/
- 2 -
接下来,继续分享,mysql命令行入门
1.
有同学会问,有那么多mysql客户端工具,为何要掌握命令行操作?
1)快捷、简单、方便
2)在没有客户端的情况下怎么办
3)如果是mysql未开启第三方访问,客户端就是白瞎
2.
如何通过命令行进入mysql
--Start--
[root@localhost~]# mysql -u root -p #老徐注释:输入左侧命令,回车 root是用户名
Enter password: #老徐注释:输入密码
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 10
Server version: 5.6.23-log Source distribution
Copyright (c) 2000, 2015, 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
--End--
3.
如何查看数据库信息
--Start--
mysql> show databases; #老徐注释:输入左侧命令,回车
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
+--------------------+
3 rows in set (0.00 sec)
mysql> #老徐注释:如上就是显示当前存在的数据库
--End--
4.
使用某个数据库
查看当前库下有哪些表
--Start--
mysql> use mysql #老徐注释:左侧,use 表名,使用某个表
Database changed
mysql> show tables; #老徐注释:显示当前数据库下的所有表名
+---------------------------+
| Tables_in_mysql |
+---------------------------+
| columns_priv |
| db |
| event |
| func |
| general_log |
| help_category |
| help_keyword |
| help_relation |
| help_topic |
| innodb_index_stats |
| innodb_table_stats |
| ndb_binlog_index |
| plugin |
| proc |
| procs_priv |
| proxies_priv |
| servers |
| slave_master_info |
| slave_relay_log_info |
| slave_worker_info |
| slow_log |
| tables_priv |
| time_zone |
| time_zone_leap_second |
| time_zone_name |
| time_zone_transition |
| time_zone_transition_type |
| user |
+---------------------------+
28 rows in set (0.00 sec)
mysql>
5.
剩下就是很简单的增删改查了
如:
select * from xx where xx = xx
update xx set xx = xx where xx
delete
insert
等等
具体sql增删改查知识,自行百度,或者买个数据库书好好看
/
- 3 -
Mysql 安装完成后,其实更多的场景,还是通过其他客户端,远程链接 ;
所以,面临一个常见的问题 。
mysql开启远程访问权限的那些坑 。
对于mysql开启远程访问权限
网上各种文章,一抓一大把
今天不重点讲:百度搜索“mysql远程访问”,可以看到你需要的很多文章
1
对于mysql
安装完后,首先必须要开启的就是远程访问
否则,每次都要进mysql服务器操作,坑~
而且,不开启远程访问,程序也无法访问
(正常情况:应用服务器 & 数据库服务器会单独部署)
2
开启权限访问有几种方式:
--修改数据库表 update
--grant方式
3
很多同学按照网上教程配置完后
经常还是会出现无法远程访问
各种错误
4
常见的如下问题
--开启完后,必须要刷新权限 flush privileges
--没有关闭防火墙
--配置文件my.cnf没修改
/
- 4 -
补充几个常用的场景 。
如何通过mysql命令行,导入mysql脚本文件数据?
解决实际的问题:
工作过程中,经常需要导入mysql脚本文件
很多同学可能会说,直接通过mysql客户端导入,轻松搞定;
但是,很多服务器,为了安全考虑,并不会开放第三方客户端登录权限(当然有很多其他方式处理,今天不探讨);
这个时候,怎么导入脚本?
前提:
你已经会操作mysql
知道mysql是啥
会基本的mysql命令(见前面的几个文章内容)
知道 mysql -u root -p123456 是什么意思
-----
正文开始:
第一步:把sql脚本文件导入当前目录,假设文件是:idomysqltest.sql
第二步:确定好要导入到哪个数据库,假设是:isTester.com
第三步:开始导入
mysql服务器输入命令:mysql –uroot –p123456 -DisTester.com<idomysqltest.sql
over,轻松搞定!
当然,还有其他方式可以导入,有兴趣自己尝试下
/
- 5 -
进入mysql终端
mysql>show variables like '%datadir%';
出来的结果即是!
mysql> show variables like '%datadir%';
+---------------+-----------------+
| Variable_name | Value |
+---------------+-----------------+
| datadir | /var/lib/mysql/ |
+---------------+-----------------+
1 row in set (0.02 sec)
/
- 6 -
DB数据非常重要,一般重要操作之前,养成先备份数据的习惯 。
mysql备份数据,一行脚本搞定 。
mysqldump -h192.168.1.111 -u idolaoxu -p dbname >dbname_file.bak
说明:
1)-h后是主机ip,如果是数据库在本机,不需要指定-h参数
2)-u后是mysql用户
3)-p是密码
4)dbname是需要备份的mysql数据库名
5)>之后是备份后的文件名
/
- 7 -
很多时候,需要查看mysql连接数 。
很简单,在mysql命令行,或者客户端执行如下命令即可:
#show status like 'Threads%';
'Threads_cached','50'
'Threads_connected','21' ###这个数值指的是打开的连接数
'Threads_created','74'
'Threads_rejected','0'
'Threads_running','3' ###这个数值指的是激活的连接数,这个数值一般远低于connected数值
#show variables like '%max_connections%';
这是是查询数据库当前设置的最大连接数
/
- 8 -
最后,补充一个Mysql数据库32条军规
此军规来自网络 。
写在前面的话:
总是在灾难发生后,才想起容灾的重要性;
总是在吃过亏后,才记得曾经有人提醒过。
核心军规
1、不在数据库做运算
cpu计算务必移至业务层
2、控制单表数据量
int型不超过1000w,含char则不超过500w;
合理分表;
限制单库表数量在300以内;
3、控制列数量
字段少而精,字段数建议在20以内;
4、平衡范式与冗余
效率优先;
往往牺牲范式;
5、拒绝3B
拒绝大sql语句:big sql
拒绝大事务:big transaction
拒绝大批量:big batch
字段类军规
6、用好数值类型
tinyint(1Byte)
smallint(2Byte)
mediumint(3Byte)
int(4Byte)
bigint(8Byte)
bad case:int(1)/int(11)
7、字符转化为数字
用int而不是char(15)存储ip
8、优先使用enum或set
例如:sexenum (‘F’, ‘M’)
9、避免使用NULL字段
NULL字段很难查询优化;
NULL字段的索引需要额外空间;
NULL字段的复合索引无效;
badcase:'name'char(32)defaultnull'age'intnotnullgoodcase:'age'intnotnulldefault0
10、少用text/blob
varchar的性能会比text高很多;
实在避免不了blob,请拆表;
11、不在数据库里存图片
索引类军规
12、谨慎合理使用索引
改善查询、减慢更新;
索引一定不是越多越好(能不加就不加,要加的一定得加);
覆盖记录条数过多不适合建索引,例如“性别”;
13、字符字段必须建前缀索引
14、不在索引做列运算
badcase:selectidwhereage +1=10;
15、innodb主键推荐使用自增列;
主键建立聚簇索引;
主键不应该被修改;
字符串不应该做主键;
如果不指定主键,innodb会使用唯一且非空值索引代替;
16、不用外键
请由程序保证约束;
sql类军规
17、sql语句尽可能简单
一条sql只能在一个cpu运算;
大语句拆小语句,减少锁时间;
一条大sql可以堵死整个库;
18、简单的事务
事务时间尽可能短;
19、避免使用trig/func
触发器、函数不用;
客户端程序取而代之;
20、不用select *
消耗cpu,io,内存,带宽;
这种程序不具有扩展性;
21、OR改写为IN()
or的效率是n级别;
in的消息时log(n)级别;
in的个数建议控制在200以内;
selectidfromtwherephone=’159′ or phone=’136′; =>selectidfromtwherephonein(’159′, ’136′);
22、OR改写为UNION
mysql的索引合并很弱智
selectidfromtwherephone = ’159′ or name = ‘john’; =>selectidfromtwherephone=’159′ unionselectidfromtwherename=’jonh’
23、避免负向%
24、慎用count(*)
25、limit高效分页
limit越大,效率越低
selectidfromt limit10000,10; =>selectidfromtwhereid >10000limit10;
26、使用union all替代union
union有去重开销
27、少用连接join
28、少用group by
分组;
自动排序;
29、请使用同类型比较
30、使用load data导数据
load data比insert快约20倍;
31、打散批量更新
32、新能分析工具
showprofile;mysqlsla; mysqldumpslow;explain;showslowlog;showprocesslist;showquery_response_time(percona);
此32军规,转载自网络;
文/小程故事多(简书作者)
原文链接:http://www.jianshu.com/p/b7849d3f8698
/
- 9 -
之前有篇版本号查看的文章,
通常,普通测试人员,操作Mysql更多是通过客户端工具。
如 Navicat 等 。
至于具体等工具使用,以及增删改查 。
如有需求,后续聊 (正常来说,这块应该不用讲,很简单)。
/
整个Mysql的内容,就是这些 。当然,你部署过程中,肯定会遇到各种其他问题,这也很正常,Linux下,各种奇怪问题,操作多了,就有经验了。
另外,要善于利用搜索引擎,检索信息,找到答案 。
如果文章,看不懂的,可以跟着老徐的视频入门(2018年,会在直播间录制系列基础必备入门视频;入口见公众号底部菜单)
整理一篇文章,确实不容易,非常耗时间 。 希望对你有用 。
/
推荐几篇文章 :
简单预告,
18年,老徐还是以「软件测试从业者综合能力提升」& 「技术人非工资收入探索」为主 。
技术文,主线是整个持续集成体系 。
更多文章,持续关注此公众号 。
此文,仅代表IDO老徐个人观点,如文章有价值,欢迎转发 。
任何第三方平台,未经允许,禁止转载
我是IDO老徐,Tester,十年测试职业老鸟,某互联网公司测试经理 。
全平台测试站点 isTester.com 维护人 ,希望通过老徐的文字能改变测试职业现状,让测试从业者整体水平提升一个Level 。
/
这是IDO老徐维护的公众号“简尚” 。
主要几方面主题 。
1. 原创测试文章(全网首发)
2. 原创测试资料 & 精选资料(后台回复“测试资料”获取所有资料)
3. 测试行业动态
4. 百人计划首发地(每期100人,搞事)。
5. IDO老徐职场十年,经验分享 。
公众号菜单,有这两年的资料合集 & 文章合集,需要的去看看。
2018 ,老徐会在「软件测试圈」,践行每日进阶,每天进步一点点 。
想成长,一起同行的,底部阅读原文,加入 。从目前来看,每天惊喜满满,学习氛围高涨 。