ch02 - MySQL安全相关配置

设置MySQL管理员账号密码 在安装MySQL数据库后,MySQL管理员的账号root密码默认为空,极不安全 启动修改丢失的MySQL单实例root密码方法 停止MySQL bash 1 /etc/init.d/mysqld stop 使用 –skip-grant-tables启动mysql,忽略授权登陆验证 bash 1 2 3 4 5 6 7 8 9 10 11 # 单实例 /app/mysql/bin/mysqld_safe --skip-grant-tables --user=mysql # 多实例 /app/mysql/bin/mysqld_safe --defaults-file=/data/3306/my.cnf --user=mysql --skip-grant-tables & # 登录时空密码 $ mysql -S /data/3306/mysql.sock ... ... Welcome to the MySQL monitor. Commands end with ; or \g. # 在启动时加 --skip-grant-tables参数,表示忽略授权 修改root密码为新密码 bash 1 2 3 4 5 6 mysql> set password=password('123'); ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement mysql> update mysql....

 ·  · 

ch05 - MySQL字符集相关配置

MySQL数据库字符集介绍 简单来说,字符集就是一套文字符号及其编码、比较规则的集合,第一个计算机字符集ASCII! MySQL数据库字符集包括字符集(character)和校对规则(collation)两个概念。其中,字符集是用来定义MySQL数据字符串的存储方式。而校对规则则是定义比较字符串的方式。 上面命令查看已建立的test数据库语句中 CHARACTER SET latin1即为数据库字符集,而COLLATE latin1_swedish_ci为校对规则,更多内容 见mysql手册第10章。 编译MySQL时,指定字符集了,这样以后建库的时候就直接create database test; 二进制安装MySQL,并没有指定字符集,这时字符集默认latin1,此时,需要建立UTF8字符集的库,就需要指定UTF8字符集建库。 sql 1 create database test1 default character set utf8 default collate=utf8_general_ci; MySQL常见字符集介绍 在互联网环境中,使用MySQL时常用的字符集有: 常用字符集 一个汉字长度(字节) 说明 GBK 2 不是国际标准,对中文环境支持很好。 UTF8 3 中英文混合环境,建议使用此字符集,用的比较多的。 latin1 1 MySQL的默认字符集 utf8mb4 4 UTF8 Unicode,移动互联网 MySQL如何选择合适的字符集? 如果处理各种各样的文字,发布到不同语言的国家地区,应选Unicode字符集,对MySQL来说就是utf-8(每个汉字三个字节),如果应用需处理英文,仅有少量汉字的utf-8更好。 如果只需支持中文,并且数据两很大,性能要求也高,可选GBK(定长 每个汉字占双字节,英文也占双字节),如果需大量运算,比较排序等,定长字符集更快,性能 处理移动互联网业务,可能需要使用utf8mb4字符集。 如无特别需求,选择UTF8 查看MySQL字符集 查看当前MySQL系统支持的字符集 MySQL可支持多种字符集,同一台机器,库或表的不同字段都可以指定不同的字符集。 sql 1 2 3 4 5 6 7 8 9 mysql> show character set; +----------+-------------------------+---------------------+--------+ | Charset | Description | Default collation | Maxlen | +----------+-------------------------+---------------------+--------+ | latin1 | cp1252 West European | latin1_swedish_ci | 1 | | gbk | GBK Simplified Chinese | gbk_chinese_ci | 2 | | utf8 | UTF-8 Unicode | utf8_general_ci | 3 | | utf8mb4 | UTF-8 Unicode | utf8mb4_general_ci | 4 | +----------+-------------------------+---------------------+--------+ 查看MySQL当前的字符集设置情况...

 ·  · 

ch03 - MySQL的备份与恢复

备份数据库的意义 运维工作到底是什么工作,到底是做什么? 运维工作简单的概括就两件事: 一是保护公司的数据;二是网站7*24小时提供服务。 那么对数据丢失一部分和网站7*24小时提供服务那个更重要呢? 都很重要,只是说相比哪个更为重要?这个具体要看业务个公司。例如:银行、金融行业,数据是最重要的,一条都不能丢,可能宕机停机影响就没那么大。百度搜索,腾讯qq聊天记录丢失了几万条数据,都不算啥。 对于数据来讲,数据最核心的就是数据库数据。 备份单个数据库练习多种参数的使用 MySQL数据库自带了一个很好用的备份命令,就是mysqldump,它的基本使用如下: sql 1 mysqldump -u UserName -p PassWord dbName > backName.sql 备份库 sql 1 mysqldump -S /data/3306/mysql.sock -uroot -p test>mysql.sql 检查备份结果 sql 1 2 3 4 5 6 7 8 9 10 11 12 $ egrep -v "#|\*|--|^$" ./mysql.sql DROP TABLE IF EXISTS `test1`; CREATE TABLE `test1` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `num1` varchar(20) NOT NULL, `num2` varchar(20) NOT NULL, `num3` varchar(20) NOT NULL, `num4` int(11) NOT NULL DEFAULT '0' COMMENT 'test1', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=2000001 DEFAULT CHARSET=utf8; LOCK TABLES `test1` WRITE; INSERT INTO `test1` VALUES (1,'1455577','9779520','4530868',0), 注:因为导出时的格式没有加字符集,一般恢复到数据库里会正常,只是系统外查看不正常而已。另外,insert是批量插入的方式,这样在恢复时效率很高。...

 ·  · 

ch01 - Linux下安装Mysql

MySQL数据库简介 编程语言排名:http://www.tiobe.com/tiobe-index 数据库排名:http://db-engines.com/en/ranking MySQL数据库分类与版本升级 MySQL数据库官网为http://www.mysql.com,其发布的MySQL版本采用双授权政策,和大多数开源产品的路线一样,分别为社区版和商业版,而这两个版本又各自分四个版本依次发布,这四个版本为Alpha版、Beta版、RC版和GA版(GA正式发布版) MySQL数据库商业版和社区版的区别 在前面的内容已经阐述过了,MySQL的版本发布采用双授权政策,即分为社区版和商业版,而这两个版本又各自分四个版本依次发布:Alpha版、Beta版、RC版和GA版(GA正式发布版) Alpha版 Alpha版一般只在开发的公司内部运行,不对外公开。主要死开发者自己对产品进行测试,检查产品是否存在缺陷、错误,验证产品功能与说明书、用户手册是否一致。MySQL是属于开放源代码的开源产品,因此需要世界各地开发者、爱好者和用户参与软件的开发测试和手册编写等工作。所以会对外公布此版本的源码和产品,方便任何人可以参与开发测试工作,甚至编写与修改用户手册。 Beta版 Beta版一般是完成功能的开发和所有的测试工作时候的产品,不会存在较大的功能或性能BUG,并且邀请或提供给公户体验与测试,以便更全面地测试软件的不足之处或存在的问题。 RC版 RC版属于生产环境发布之前的一个小版本或称候选版,是根据Beta测试结果,收集到的BUG或缺陷之处等收集到信息,进行修复和完善之后的新一版本 GA版 GA版是软件产品正式发布的版本,也称生产版本的产品。一般情况下,企业生产环境都会选择GA版本的MySQL软件,用于真实的生产环境中。偶尔有个别的大型企业会追求新功能驱动而牺牲稳定性使用其他版本,但这个是个例。 MySQL四中发布版本选择说明 MySQL AB官方网站会把五种数据库版本都提供下载,主要是MySQL数据库属于开发源代码的数据库产品,鼓励全球的技术爱好者参与研发、测试、文档编写和经验分享,甚至包过产品发展规划,对于Development版本、Alpha版本和Beta版本是绝对不允许使用在任何生产环境,毕竟这是一个GA版本之前,也即生产版本发布之前的一个小版本。另外,对MySQL数据库GA版本,也是需要慎重选择,开源社区产品毕竟不是经过严格的测试工序完成的产品,是全球开源技术人员的资源完成的,会存在比商业产品稳定性弱的缺陷。更严格的选择见后文。 MySQL产品路线 MySQL产品路线变更历史背景 早起MySQL也是遵循版本号逐渐增加的方式发展的,格式例如:mysql-x.xx.xx.tar.gz,例如DBA都非常熟悉的生产场景版本:4.1.7、5.0.56等。 近几年,为了提高MySQL产品的竞争优势、以及提高性能、降低开发维护成本等原因,同时,更方便企业用户更精准的选择适合的版本产品用于自己的企业生产环境中。 MySQL在发展到5.1系列版本之后,重新规划为3条产品线 5.0.xx到5.1.xx产品线介绍 第一条产品线:5.0.xx及升级到5.1.xx的产品系列,这条产品线继续完善与改进其用户体验和性能,同时增加新功能,这条路线可以说是MySQL早起产品的延续系列,这一系列的产品发布情况及历史版本如下: MySQL 5.1是当前稳定(产品质量)发布系列。只针对漏洞修复重新发布;没有增加会影响稳定性的新功能。 MySQL 5.1:Previous stable(production-quality) release MySQL 5.0是前一稳定(产品质量)发布系列。只针对严重漏洞修复和安全修复重新发布;没有增加会影响该系列的重要功能。 MySQL 5.0:Old stable release nearing the end of the product lifecycle MySQL 4.0和3.23是旧的稳定(产品质量)发布系列。该版本不再使用,新的发布只用来修复特别严重的漏洞(以前的安全问题)。 5.4.xx开始到5.7.xx产品线系列介绍 为了更好的整合MySQL AB公司社区和第三方公司开发的新存储引擎,以及吸收新的实现算法等,从而更好的支持SMP架构,提高性能而做了大量的代码重构。版本号为从5.4.xx开始,目前发展到了5.6.x 主流:互联网公司用mysql5.5,逐步过渡到5.6。 6.0.xx-7.1.xx产品线系列介绍 第三条产品线:为了更好的推广MySQL Cluster版本,以及提高MySQL Cluster的性能和稳定性,以及功能改进和增加,以及改动mysql基础功能,使其对Cluster存储引擎提供更有效地支持与优化。版本号为6.0.xx开发,目前发展到7.1.xx MySQL数据库软件命名介绍 MySQL数据库软件的名字是由3个数字和一个后缀组成的版本号。例如,像 mysql-5.0.56.tar.gz 的版本号这样解释: 第一个数字(5)为主版本号,描述了文件格式。所有版本5发行都有相同文件格式。 第二个数字(0)为发行级别,主版本号和发行级别组合到一起便构成了发行序列号。 第三个数字(56 为在此发行系列的版本号,随每个新分发版本递增。通常你需要已经选择的发行(release)的最新版本。 每次更新后,版本字符串的最后一个数字递增。如果相对于前一个版本增加了新功能或有微小的不兼容性,字符串的第二个数字递增。如果文件格式改变,第一个数字递增。 后缀显示发现的稳定性级别。通过一系列后缀显示如何改进稳定性。可能的后缀有: alpha 表明发行包含大量未被彻底测试的新代码。已知的缺陷应该在新闻小节被记录。请参见附录D:MySQL变更史。在大多数alpha版本中也有新的命令和扩展。alpha版本也可能有主要代码更改等开发。但我们在发布前一定对其进行测试。 beta 意味着该版本功能是完整的,并且所有的新代码被测试了,没有增加重要的新特征,应该没有已知的缺陷。当alpha版本至少一个月没有出现报导的致命漏洞,并且没有计划增加导致已经实施的功能不稳定的新功能时,版本则从alpha版变为beta版。在以后的beta版、发布版或产品发布中,所有API、外部可视结构和SQL命令列均不再更改。 rc 是发布代表;是一个发行了一段时间的beta版本,看起来应该运行正常。只增加了很小的修复。(发布代表即以前所称的gamma 版) 如果没有后缀,这意味着该版本已经在很多地方运行一段时间了,而且没有非平台特定的缺陷报告。只增加了关键漏洞修复修复。这就是我们称为一个产品(稳定)或“通用”版本的东西。...

 ·  · 

redis安全相关配置

为Redis客户端外部设置连接密码 因为redis速度相当快,所以在一台比较好的服务器下,一个外部的用户可在一秒钟进行上万次的密码尝试,这意味着你需要指定非常非常强大的密码来防止暴力破解。 修改配置文件 bash 1 requirepass 123@1 重启服务后登录客户端提示没有验证 bash 1 2 3 $ redis-cli 127.0.0.1:6379> keys * (error) NOAUTH Authentication required. 验证成功后,可以正常操作 bash 1 2 3 4 5 127.0.0.1:6379> auth 123@1 OK 127.0.0.1:6379> keys * 1) "test-durable-1" 2) "test-durable" 命令行临时生效 在命令行设置后,redis在下次重启前,每次登录都需要验证密码 bash 1 2 3 4 5 6 127.0.0.1:6379> CONFIG set requirepass 123@1 OK 127.0.0.1:6379> quit $ redis-cli 127.0.0.1:6379> keys * (error) NOAUTH Authentication required. 注意:配置Redis复制的时候如果主数据库设置了密码,需要在从数据库的配置文件中通过masterauth参数设置主数据库的密码,以使从数据库连接主数据库时自动使用AUTH命令认证。 通过mysql命令行指定密码方式登录Redis客户端 bash 1 2 3 4 $ redis-cli -a 123@1 127....

 ·  ·