数据库应用:Navicat连接MySQL

这篇具有很好参考价值的文章主要介绍了数据库应用:Navicat连接MySQL。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、理论

1.Navicat

2.MVCC

二、实验

1.Navicat连接MySQL

 2.navicat的基础操作

 3.测试提交事务

三、问题

1.解决1130

2.解决2003

3.解决1045

4.密码安全级别不满足

四、总结


一、理论

1.Navicat

(1)简介

Navicat Premium 是一套数据库开发工具,实现从单一应用程序中同时连接 MySQL、MariaDB、MongoDB、SQL Server、Oracle、PostgreSQL 和 SQLite 数据库。它与 Amazon RDS、Amazon Aurora、Amazon Redshift、Microsoft Azure、Oracle Cloud、MongoDB Atlas、阿里云、腾讯云和华为云等云数据库兼容。你可以快速轻松地创建、管理和维护数据库。

Navicat 是一套快速、可靠并价格相宜的数据库管理工具, 专为简化数据库的管理及降低系统管理成本而设。它的设计符合数据库管理员、开发人员及中小企业的需要。Navicat 是以直觉化的图形用户界面而建的,让你可以以安全并且简单的方式创建、组织、访问并共用信息。

(2)版本

Navicat提供了多个版本以满足不同用户的需求,以下是其中几个版本的简要介绍:

① Navicat Premium:这是Navicat最全面的版本,它提供了对多种数据库类型(MySQL、MariaDB、建模、数据同步、备份和还原等。建模、数据同步、备份和还原等。

② Navicat for MySQL/MariaDB/PostgreSQL/Oracle/SQL Server:这些版本专门为单个数据库类型而开发,因此它们具有更专业的特性和工具来优化您的MySQL、MariaDB、 PostgreSQL、 Oracle或SQLServer数据库管理。

③ Navicat Essentials: 这是- - 个轻量级的版本,适用于只需要基本数据库管理功能的用户。它支持MySQL、MariaDB、 PostgreSQL和SQLite数据库, 但缺少一些高级功能。

④ Navicat for MongoDB:专门J针对MongoDB进行了优化,支持MongoDB的所有常见功能,包括数据导入/导出、查询构建、数据编辑、索|管理等。

2.MVCC

(1)概念

MVCC(Multi-Version Concurrency Control)即多版本并发控制。是一种并发控制的方法,一般在数据库管理系统中,实现对数据库的并发访问,在编程语言中实现事务内存。文章来源地址https://www.toymoban.com/news/detail-564979.html

在 MySQL InnoDB 中主要是为了提高数据库并发性能,用更好的方式去处理读-写冲突,做到即使有读写冲突时,也能做到不加锁,非阻塞并发读
(2)当前读和快照读
  ① 当前读(悲观锁的具体实现)
(select。。。lock in mode)共享锁和(select。。。for update/insert/delete)排他锁这些操作都属于当前读,他们读取的都是记录的最新版本,并且读取时还需要保证其他事务不能修改其正在读取的当前记录。

 ② 快照读(MVCC非阻塞的具体实现)
像不加锁的 select 操作就是快照读,即不加锁的非阻塞读;快照读的前提是隔离级别不是串行级别,串行级别下的快照读会退化成当前读;之所以出现快照读的情况,是基于提高并发性能的考虑,快照读的实现是基于MVCC ,可以认为 MVCC 是行锁的一个变种,但它在很多情况下,避免了加锁操作,降低了开销;既然是基于多版本,即快照读可能读到的并不一定是数据的最新版本,而有可能是之前的历史版本

(3)原理

从navicat事务的隔离级别可以发现,数据库有三种并发的场景:(读while读)(读while写)(写while写),当然,(读while读)没有什么问题,但后两者存在着冲突。

隐式字段

每行记录除了我们自定义的字段外,还有数据库隐式定义的 DB_TRX_ID;DB_ROLL_PTR等字段。

DB_TRX_ID
6 byte,最近修改事务 ID:记录最后一次修改该记录的事务 ID


DB_ROLL_PTR
7 byte,回滚指针,指向这条记录的上一个版本的位置(存储于 rollback segment 里)


DB_ROW_ID
6 byte,隐含的自增 ID(隐藏主键),如果数据表没有主键,InnoDB 会自动以DB_ROW_ID产生一个聚簇索引


还有一个删除 flag 隐藏字段, 既记录被更新或删除并不代表真的删除,而是删除 flag 变了

② undo日志

insert undo log(事务在 insert 新记录时产生)只在rollback时需要,在事务提交后可以被立即丢弃

update undo log(事务在进行 update 或 delete 时产生)提交后直到没有事务涉及后,由purge线程统一清除

*purge:更新或者删除操作都只是设置一下老记录的 deleted_bit ,并不真正将过时的记录删除。为了节省磁盘空间,InnoDB 有专门的 purge 线程来清理 deleted_bit 为 true 的记录。为了不影响 MVCC 的正常工作,purge 线程自己也维护了一个read view(这个 read view 相当于系统中最老活跃事务的 read view );如果某个记录的 deleted_bit 为 true ,并且 DB_TRX_ID 相对于 purge 线程的 read view 可见,那么这条记录是可以被安全清除的。
不同事务或者相同事务的对同一记录的修改,会导致该记录的undo log成为一条记录版本线性表,既链表,undo log 的链首就是最新的旧记录,链尾就是最早的旧记录

两者中,insert undo log 实际上就是rollback segment中的旧纪录链,上文中navicat上我们进行的read uncommitted级别的事务在对数据进行修改时,数据库先为该行加锁(排它锁),把修改之前的该行数据拷贝到undo log中作为旧纪录,此时被修改的记录的DB_TRX_ID就会变为做此修改的事务的ID,我们默认从1开始,之后递增,而DB_ROLL_PTR则指向undo log中的副本数据(SQL语句:delete。。。),事务提交后,释放锁。

而update undo log的实现原理是,当进行数据修改的操作时,会有一个叫做COW(copy on write)的机制,/*吐槽:奶牛机制。。。*/还是字面意思,复制写,它的存在是为了解决一个读写并发的问题,为了让读写可以互不干扰,例如在进行update操作时,会先把要操作的行复制出一份,在复制出的行上进行数据修改,复制出的这行数据的事务id会发生更改,而回滚指针则指向了update undo log(被复制的数据),也就是进行update操作的原数据,解决了读写并发的问题同时带来了数据读取的延后性问题

Read View

三个主要属性:

表1 Read View属性

属性 功能
trx_list             (随便取的名字)  开启read view时当前活跃的(未提交)事务id集合
up_limit_id         开启read view时最小的事务id
low_limit_id       开启read view后,应该分配给下一个事务的id值,也即当前最大事务id+1

事务执行的快照读的那一刻,会生成数据库系统当前的一个快照,记录并维护系统当前活跃事务的 ID (当每个事务开启时,都会被分配一个 ID , 这个 ID 是递增的,所以最新的事务,ID 值越大,反之越小);主要是用来做可见性判断的, 即当我们某个事务执行快照读的时候,对该记录创建一个 Read View 读视图,通过一定条件判断当前事务能够看到哪个版本的数据,既可能是当前最新的数据,也有可能是该行记录的undo log里面的某个版本的数据

read view遵循一个可见性算法来进行判断,将要被修改的数据的最新记录中的 DB_TRX_ID(当前事务 ID )取出来,与系统当前其他活跃事务的 ID 去对比(由 Read View 维护),如果事务id 跟 Read View 的属性做了某些比较,不符合可见性,那就通过 DB_ROLL_PTR 回滚指针去取出 Undo Log 中的 DB_TRX_ID 再比较,即遍历链表的 DB_TRX_ID(从链首到链尾,即从最近的一次修改查起),直到找到满足特定条件的 DB_TRX_ID , 那么这个 DB_TRX_ID 所在的旧记录就是当前事务可见的最新老版本。

DB_TRX_ID < up_limit_id , 当前行事务id比活跃的最小事务id还小时,当前事务对该记录的修改已经提交,因为当前事务id比活跃的最小事务id还小,不在活跃的事务之中,也就意味着该事务已经提交或回滚。也就是在生成Read View之前,事务已经提交,则这个数据是可读的;

 DB_TRX_ID > low_limit_id , 修改该行的事务id大于了Read View里系统待分配的下一个事务id,说明修改该行的事务是生成该Read View之后出现的事务,这时,应该是不可见的,一个事务不可以看到未提交事务所作的数据修改(脏读)。

DB_TRX_ID 在 up_limit_id 和 low_limit_id 的范围内,分为两种情况:

(1)包含在 trx_list 中表示在开启这个read view时,该事务还是活跃的(未提交),应该不可见,否则就是脏读

(2)不包含在 trx_list 中表示在开启这个read view时,该事务已经提交了,所以可见

基于RC隔离级别:与RR相比,RC的特点是不可重复读,也就是每一次读取的都是当前最新的数据,那么RC每一次进行读取的时候会开启一个新的RW,这样就可以保证,在每次读取数据的时候,TRX_list里都是当前最新的活跃事务。

二、实验

1.Navicat连接MySQL

(1)新建连接

数据库应用:Navicat连接MySQL,数据库,mysql

 (2)配置连接

数据库应用:Navicat连接MySQL,数据库,mysql

(3)连接数据库

这里可能会出现登录失败的情况,开的虚拟机和navicat跑在一台机器上,排除数据库没有开启成功、主机防火墙未设置策略或未关闭(错误码1130)等问题,可能存在的问题是windows主机没有开启telnet功能,需要做如下设置:

数据库应用:Navicat连接MySQL,数据库,mysql

 (4)登录数据库需要授权

对用户进行一个网段进行授权

grant all privileges on *.* to 'root'@'localhost' identified by '123456';

#将所有数据库的所有表(*.*)的所有权限(all privileges),授予通过 一个网段 ip(%)访问的用户,密码为123456,如果要限制所有机器可以访问,将网段换成相应的%即可

这样就可以成功登录

flush privileges;  刷新权限

#当然,给root用户设置任何host都可以登录明显是不安全的

数据库应用:Navicat连接MySQL,数据库,mysql

 (5) 连接成功

数据库应用:Navicat连接MySQL,数据库,mysql

 2.navicat的基础操作

(1)数据库的基本操作

通过右键点击,我们可以创建、编辑、删除......数据库更改数据库和表的属性。

数据库应用:Navicat连接MySQL,数据库,mysql

 双击表查看表内容数据库应用:Navicat连接MySQL,数据库,mysql

右击

数据库应用:Navicat连接MySQL,数据库,mysql

 和数据库表内容信息一样 :

数据库应用:Navicat连接MySQL,数据库,mysql

 (2)对表进行操作

右键test库下的“表”,选择新建数据表,或右击一个已存在的表点击“设计表”,进入一个编辑表的窗口。在这里对表进行表结构的展示和编辑,可以插入字段并定义字段类型和长度,设置主键、设置默认值,是否为“null”等,相当于describe和alter操作。

数据库应用:Navicat连接MySQL,数据库,mysql

数据库应用:Navicat连接MySQL,数据库,mysql

 数据库应用:Navicat连接MySQL,数据库,mysql

 在这个界面创建外键,我们先清空表内容(最好创建表的时候设置,否则会报错),所关联的主表的主键和foreign key需要在类型、长度上保持一致,同时外键不可以设置自增、无符号、填充零

数据库应用:Navicat连接MySQL,数据库,mysql

 (3)sql 语句管理数据库

在navicat中,也可以点击新建查询,在命令行中输入SQL语句的方式管理数据库中的数据,并可以使用Tab键对命令进行补全。

数据库应用:Navicat连接MySQL,数据库,mysql

 (4)用户管理

点击用户进入用户的管理界面,在这里可以直观的看到当前数据库(非单个库)的所有用户,也可以对他们进行更改密码,新建、删除 ,权限设置,以及可登录的主机设置(文章开头的设置)。

数据库应用:Navicat连接MySQL,数据库,mysql

 (5)视图的创建

新建摄图

数据库应用:Navicat连接MySQL,数据库,mysql

 数据库应用:Navicat连接MySQL,数据库,mysql数据库应用:Navicat连接MySQL,数据库,mysql

(6)表的导入与导出

数据库应用:Navicat连接MySQL,数据库,mysql

 导出全部记录

数据库应用:Navicat连接MySQL,数据库,mysql

选择格式

数据库应用:Navicat连接MySQL,数据库,mysql

选择导出文件

数据库应用:Navicat连接MySQL,数据库,mysql

 选择字段

数据库应用:Navicat连接MySQL,数据库,mysql

数据库应用:Navicat连接MySQL,数据库,mysql

 开始导出-点击开始

数据库应用:Navicat连接MySQL,数据库,mysql

完成

 数据库应用:Navicat连接MySQL,数据库,mysql

 在保存的excel表打开查看

数据库应用:Navicat连接MySQL,数据库,mysql新建备份

 (7)数据库的备份 

选择备份

数据库应用:Navicat连接MySQL,数据库,mysql

 新建备份

数据库应用:Navicat连接MySQL,数据库,mysql

 备份完成

数据库应用:Navicat连接MySQL,数据库,mysql

(8)还原备份 

 数据库应用:Navicat连接MySQL,数据库,mysql

 3.测试提交事务

InnoDB四种隔离级别:read uncommit(有脏读问题)、read commit(有不可重复读问题)、repeatable read(有幻读问题)、serializable(解决前三种问题,但效率过低)丢失更新。

(1)read uncommit(有脏读问题)

两个事务同时对同一个数据进行只读不提交操作,一个进行修改,一个来进行读取数据。

数据库应用:Navicat连接MySQL,数据库,mysql数据库应用:Navicat连接MySQL,数据库,mysql

(2)read committed(oracle默认隔离级别)

数据库应用:Navicat连接MySQL,数据库,mysql

(3)测试回滚事务

数据库应用:Navicat连接MySQL,数据库,mysql

 回滚操作

数据库应用:Navicat连接MySQL,数据库,mysql

(4)多个回滚点测试 

数据库应用:Navicat连接MySQL,数据库,mysql

三、问题

1.解决1130

数据库应用:Navicat连接MySQL,数据库,mysql
    (1)解决方法
    在安装mysql的虚拟机中登录mysql账号,更改“mysql”数据库里的“user”表里的“host”项,把原来的“localhost”改成“%”;
   

    mysql -uroot -p password
    mysql>use mysql;
    mysql>update user set host = '%' where user = 'root';
    mysql>select host, user from user;
    mysql>flush privileges或mysql>service mysqld restart生效以上设置

数据库应用:Navicat连接MySQL,数据库,mysql

2.解决2003

    防火墙问题,需要开放对应端口(3306)或者关闭防火墙;

  (1)开放3306端口

firewall-cmd --zone=public --add-port=3306/tcp --permanent    然后重启防火墙
               命令含义:
 
            --zone #作用域
 
            --add-port=3306/tcp  #添加端口,格式为:端口/通讯协议
 
            --permanent   #永久生效,没有此参数重启后失效
 
        

    (2)关闭防火墙:关闭防火墙:systemctl stop firewalld.service(临时关闭)
                          禁止开机启动启动防火墙:systemctl disable firewalld.service
 

防火墙简单命令:
                重启防火墙:firewall-cmd --reload
                查看防火墙状态:firewall-cmd --state
                关闭防火墙:systemctl stop firewalld.service
                开启防火墙:systemctl start firewalld.service
                禁止开机启动启动防火墙:systemctl disable firewalld.service

3.解决1045

数据库应用:Navicat连接MySQL,数据库,mysql

root用户下host为‘%‘和‘localhost’的密码竟然不一样:

 数据库应用:Navicat连接MySQL,数据库,mysql

(1)原因分析

当不给localhost主机添加密码时,无论是在非本机ip还是localhost都能依靠主机为%的密码通过mysql验证,完成连接:

当单独给localhost添加跟%不一样的密码时,如果你在本地登录,mysql数据库只认localhost主机的密码,不认%主机的密码,并且通过navicate登录的时候虽然你的主机名或者ip填的localhost,mysql也不会让你通过主机为localhost那个密码登录的,只能使用%的那个密码登录。
 

 (2)解决方法

给%添加跟localhost一样的密码

grant all on *.* to root@'%' identified by '123456' with grant option; 

select host, user,authentication_string  from user;

数据库应用:Navicat连接MySQL,数据库,mysql

(3)连接成功

数据库应用:Navicat连接MySQL,数据库,mysql

4.密码安全级别不满足

数据库应用:Navicat连接MySQL,数据库,mysql

 (1)原因分析

MySQL的 validate_password插件默认安装。这将要求密码包含至少一个大写字母,一个小写字母,一个数字和一个特殊字符,并且密码总长度至少为8个字符。

(2)解决方法

需要修改简单密码,可以依次执行以下操作步骤:

set global validate_password_policy=0;
set global validate_password_length=1;
set global validate_password_mixed_case_count=2;


-- 然后进行密码更改
grant all on *.* to root@'%' identified by '123456' with grant option;

或者
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';

数据库应用:Navicat连接MySQL,数据库,mysql

 

四、总结

Navicat Premium 是一套数据库开发工具,实现从单一应用程序中同时连接 MySQL、MariaDB、MongoDB、SQL Server、Oracle、PostgreSQL 和 SQLite 数据库。

MVCC(Multi-Version Concurrency Control)即多版本并发控制。是一种并发控制的方法,一般在数据库管理系统中,实现对数据库的并发访问,在编程语言中实现事务内存。

到了这里,关于数据库应用:Navicat连接MySQL的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包