mysql 知识集锦

2018-03-01 鲁鲁槟 收藏

1.1、简单介绍

MySQL 由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司。 MySQL 是一个开源的关系型数据库管理系统。 MySQL 分为社区版和企业版。

image.png

1.1、php mysql 数据库本地连接采用 127.0.0.1 而不是 localhost,速度飞快

数据库本地连接采用 127.0.0.1 而不是 localhost,你会发现速度飞快,至于为什么,我不清楚,如果您清楚,请在下方留言,谢谢。

20180402

原因:在 my.ini 中配置了 bind-address=127.0.0.1,应该使用 127.0.0.1 连接本地 MySQL 数据库 。(其实bind-address=0.0.0.0速度已经很快了)

1.2、phpstudy 启动后为什么 mysql 无法启动

找到下图中几个文件,删除后重启 phpstudy 即可

1.4、phpMyAdmin 连接云数据库

云服务器上进入 phpMyAdmin 的 web 目录中,找到 libraries 文件夹下的 config.default.php 这个文件
$cfg[Servers][$i]host] = localhost; 

将此行的localhost改成云数据库的内网IP 例如:
$cfg[Servers][$i][host] = 10.66.154.xxx;

然后保存文件即可。

1.7、用复制mysql/data 文件夹 下面的数据库的形式来复制数据库出现的问题

①、问题

直接拷贝data下的数据库数据进行备份 , 发现部分数据表不见了。

②、原因

以表“Table”为例: 如类型是MyISAM, 数据文件则以”Table.frm”,”Table.MYD”,”Table.MYI”三个文件存储于”/data/databasename/”目录中. 如类型是InnoDB, 数据文件则存储在”/data/″中的ibdata1文件中(一般情况),结构文件存在于Table.frm中. MySQL的数据库文件直接复制便可以使用,但是那是指“MyISAM”类型的表。 而使用MySQL-Front直接创建表,默认是“InnoDB”类型,这种类型的一个表在磁盘上只对应一个“*.frm”文件,不像MyISAM那样还“*.MYD,*.MYI”文件。 MyISAM类型的表直接拷到另一个数据库就可以直接使用,但是InnoDB类型的表却不行

③、解决方法

同时拷贝innodb数据库表“*.frm”文件和innodb数据“ibdata1”文件到合适的位置。启动MySQL的Windows服务 由于MySQL这样数据混杂的形式, 往往很容易让使用者在备份时忘记了备份InnoDB, 从而导致了上述错误。

如果还是有问题,停止mysql服务,将目录下的ib_logfile*文件全部删除掉,重新启动mysql服务。

④、总结

  • 在进行mysql数据库备份的或迁移的时候,尽量备份完成所需要的数据;

  • 如果直接拷贝原有数据库文件"*.frm"、"*.MYD"、"*.MYI"等文件时候,如果原数据库引擎是InnoDB,切记还需拷贝ibdata1文件

  • 备份数据库的时候,最好是用相关的工具进行备份或是导出sql文件,以免浪费时间在数据库恢复上

  • msyql版本或是备份工具的版本不同,也可能引起数据恢复有问题。

1.12、mysql 授权用户 —— 访问远程数据库

①、需求

有一台本地联网的电脑 A(ip 为 183.57.196.210);

有一台服务器 B(ip 为 119.29.200.190),A 想连接 B 的 mysql 数据库。

②、实现过程

A、登录服务器 B 的 mysql,允许用户 lulubin 从 ip 为 183.57.196.210 的主机连接到 mysql 服务器,并使用 123456 作为密码:

GRANT ALL PRIVILEGES ON *.* TO root@183.57.196.210 IDENTIFIED BY 123456 WITH GRANT OPTION;

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'DU5y2AJ5qpuWYBBi' WITH GRANT OPTION;

B、登录本地电脑 A 的 mysql,新建连接,保存之后即可访问服务器 B 的 mysql 数据库

1.15、使用OPTIMIZE TABLE命令来整理表碎片实践

①、前言

对含有BLOB或TEXT字段的表,若经常做修改或删除类的操作,需要定期执行OPTIMIZE TABLE命令来整理碎片。

②、操作

create table t1(id varchar(64), content text)engine=myisam, default charset=utf8;

插入数据

insert into t1 values(1, repeat('tony', 100));          --repeat('tony', 100),返回tony重复100次后的数据
insert into t1 values(2, repeat('tony', 100));
insert into t1 values(3, repeat('tony', 100));
快速往表中插入大量数据的一种好方式,重复执行下面的语句
insert into t1 select * from t1;   --从t1查询出所有数据,再插入t1表,数据成倍增长

查看文件大小

cd /var/lib/mysql/test/
du -sh t1.*

12K t1.frm 
310M t1.MYD 
4.0K t1.MYI

删除数据再查看文件大小

delete from t1 where id = 2;
du -sh t1.* 

12K t1.frm 
310M t1.MYD 
4.0K t1.MYI

发现删除大量数据后,表文件的物理大小并没有减少。

使用OPTIMIZE TABLE命令整理表碎片

 optimize table t1;
du -sh t1.* 

12K t1.frm 
206M t1.MYD 
4.0K t1.MYI

使用OPTIMIZE TABLE命令整理表碎片后,表文件大小减少了将近三分之一。

当你删除数据时,mysql并不会回收,被已删除数据的占据的存储空间,以及索引位。而是空在那里,而是等待新的数据来弥补这个空缺,这样就有一个缺少,如果一时半会,没有数据来填补这个空缺,那这样就太浪费资源了。所以对于写比较频烦的表,要定期进行optimize,一个月一次,看实际情况而定了。

1.16、navicate for mysql 导入txt文件

①、下载 txt 文件

txt 部分文件内容如下:

默认.png http://www.phpstudy.net phpstudy
Zend.png http://www.zend.com Zend
腾讯云.png https://www.qcloud.com 腾讯云
阿里云.png https://www.aliyun.com 阿里云

②、新建表

DROP TABLE IF EXISTS `test`;
CREATE TABLE `test` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `png` varchar(255) DEFAULT NULL,
  `link` varchar(255) DEFAULT NULL,
  `name` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

③、导入向导

01.png

02.png

03.png

04.png

05.png

06.png

07.png

08.png

09.png

10.png

暂时还没有评论,快来抢沙发吧~

发表评论

您需要登录后才可以评论。登录 | 立即注册
阅读 983