一、MySQL的连接建立与权限

  写这些的目的一是记录下工作这几年所学,算是成长脚印吧。二是复习一遍,也给自己当笔记看,通篇观点都属于个人理解较多。读者观看的时候也需要自己判断下是否正确,另外,记下一段我非常喜欢的话:年少轻狂的我同样有对未来的迷茫,对生活的愤懑,对社会的厌恶,对世道的鄙夷......在阅尽沧桑的饱览岁月的人看来,这些也许很幼稚,但这不正是青春的特质吗?青春既然不能够被挽留,也不能够被拒绝,那就用自己的方式去挥霍或者,珍惜。

  一、连接建立前

    1、连接方式

    2、服务器、客户端域名连接

    3、重要参数

  二、权限

一、连接建立前

  1、连接方式

首先介绍连接方式,mysql可以提供来自网络的tcp/ip连接和只服务本机localhost的Unix域套接字连接,如果服务器不监听来自网络的连接,远程客户端连接会报错,服务器不会收到任何消息。

Tcp/ip:用于跟mysql实例不在同一台机器上的客户端和本机127.0.0.1连接;注意防火墙的设置,防火墙是否放过mysql的进程,是否屏蔽了mysql的3306端口。
Unix域套接字:它不是一种网络协议,只用于客户端和mysql实例在同一台机器上,用localhost访问。 <1>skip_networking
告诉mysql不要监听网络,服务只限于本机localhost访问,127.0.0.1也不能访问。如果不需要其他主机连接,最好把这变量打开,防止穷举密码攻击。
<2> bind-address
只监听某个特定地址的连接,这个参数是指定哪些服务器监听哪些ip的请求,其他ip就算有权限也连接不上。为了数据的安全,可以考虑让MySQL只守候在127.0.0.1上,这样从Internet上就无法直接访问数据库了。

  2、服务器、客户端域名连接

1
 

  

1)服务端
  只要你安装启动了mysql服务,就可以通过mysql服务器主机名称或ip连接。但是客户端给mysql服务器传递之前,主机名称一定要转换成ip,如果此主机名称不是公共网络上的主机名称,必须在hosts表里填写主机名和其ip对应关系,
否则无法连接。
  Mysql服务器本机命令行客户端:Shell>./mysql –hhost –uuser –ppwd
  分别在C:\Windows\System32\drivers\etc\hosts和/etc/hosts中添加:ip hostname,然后分别重新连接,均可正常连接。
【1】resolveip工具
  对hostname和ip的转换工具。位于/usr/local/mysql/bin/。 2)客户端域名连接授权
  此域名对应mysql库的user表中的host字段,是用来控制对客户端的连接权限的。
  mysql> INSERT INTO `user` VALUES ('ip', 'user', password("pwd"), 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', '', '', '', '', '0', '0', '0', '0', '', null);//域名授权
  mysql> INSERT INTO `user` VALUES ('ip', 'user', password("pwd"), 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', '', '', '', '', '0', '0', '0', '0', '', null);//ip段授权,在此ip段的客户端都可以通过hanmm这个账号连接mysql服务。
  or
  grant 权限 on 数据库对象 to 用户@'host' identified by 'pwd'
   Host cache
   选项就能禁用主机缓存。想要清除主机缓存,可以提交 FLUSH HOSTS 语句或者运行 mysqladmin flush-hosts. <1>skip-name-resolve
  skip-name-resolve能大大加快用户获得连接的速度,特别是在网络情况较差的情况下。MySQL在收到连接请求的时候,会根据请求包中获得的ip来反向追查请求者的主机名。然后再根据返回的主机名又一次去获取ip。如果两次获得的ip相同,那么连接就成功建立了。在DNS不稳定或者局域网内主机过多的情况下,一次成功的连接将会耗费很多不必要的时间。假如MySQL服务器的ip地址是广域网的,最好不要设置skip-name-resolve。
  When a new thread connects to mysqld, mysqld will spawn a new thread to handle the request. This thread will first check if the hostname is in the host cache. If not the thread will call gethostbyaddr_r() and gethostbyname_r() to resolve the hostname.
  当一个新的连接请求产生,mysql会启动一个新线程去处理此请求,该线程首先会检查域名缓存里是否有此域名,如果缓存里不存在,则调用gethostbyaddr_r()和gethostbyname_r()处理此域名。
  If the operating system doesn't support the above thread-safe calls, the thread will lock a mutex and call gethostbyaddr() and gethostbyname() instead. Note that in this case no other thread can resolve other hostnames that is not in the hostname cache until the first thread is ready.
如果操作系统对这两个函数不提供线程安全的调用(我理解是每个线程隔离并行),则此线程对操作系统该资源加锁,然后调用方法,直到它处理完释放此资源锁,别的线程才能调用。
  You can disable DNS host lookup by starting mysqld with --skip-name-resolve. In this case you can however only use IP names in the MySQL privilege tables.
你可以在启动时加--skip-name-resolve这个参数,避免DNS host查找过程,这样你使用ip地址而不能使用域名连接访问mysql。
  If you have a very slow DNS and many hosts, you can get more performance by either disabling DNS lookop with --skip-name-resolve or by increasing the HOST_CACHE_SIZE define (default: 128) and recompile mysqld.
  如果DNS服务很慢且有很多域名,想要提高性能,你可选择加参数--skip-name-resolve启动,或者增大域名缓存空间大小。
允许域名解析的时候 localhost=127.0.0.1,禁止域名解析之后localhost与127.0.0.1并不是同一个主机。所以在禁止域名解析之后,需要重新设置用户权限,不能再使用 localhost ,使用 % 任意主机或者IP地址如127.0.0.1 。   You can disable the hostname cache with --skip-host-cache. You can clear the hostname cache with FLUSH HOSTS or mysqladmin flush-hosts.   If you don't want to allow connections over TCP/IP, you can do this by starting mysqld with --skip-networking. <2>host_cache_size
  5.6.26默认279。The host_cache_size value, introduced in MySQL 5.6.5, is ignored by the server. The host_cache table only holds 128 entries.
<3>skip-grant-tables
  如果忘记管理员密码,在启动mysql时不启动grant-tables授权表。mysqld_safe --skip-grant-tables &
  然后修改管理员密码:
  mysql>update user set password=password('yournewpasswordhere') where user='root';
  mysql>flush privileges;
  mysql>exit;
  重启mysql。

  3、重要参数

<1>socket
默认值是/tmp/mysql.sock,此文件删除掉会导致socket连接失败。
Unix平台:用于本地客户端连接的套接字文件。默认为/var/lib/mysql/mysql.sock。
Windows:用于本地客户端连接的命名管道名。默认为mysql。
<2>max_connections
mysql是多线程的,可以同时接收客户端的多个连接(connection)请求。max_connections是整个mysql允许的最大并发连接数(实际值比该值多1,预留给系统管理员),影响整个mysql应用的并发处理能力。
只要服务器监听了网络tcp连接,不管用户名密码对不对,有没有权限,客户端发起连接请求,不管三七二十一,先检查当前连接数是否已达到上限,达到连接上线拒绝连接。一般来说,只要mysql主机性能允许,应该将
该参数设置的尽量大一点,一般1000-5000左右是一个比较合适的参考值。
<3>max_user_connections
每个用户允许的最大连接数。该参数针对单个用户的连接限制。
在一般情况下我们很少使用这个限制,只有在一些专门提供mysql数据存储服务或者提供虚拟主机的应用中可能用到。
<4>connect_timeout
连接超时 检测方法 telnet ip 3306.连接超时时间,客户端发送tcp第一次握手,我要请求了;服务器端收到请求,检查连接未达到上限,返回同意,计时开始;客户端发送真正的(如select)请求,再到服务器端,
这段时间超过connet_timeout,就断开了。默认值10,一般不要动。【在数据量大的情况下,由于网络等原因,如果connect_timeout设置过低,极有可能连接超时。这个值最低好像是2,许允许设置成0,设置成0其实就是
所有连接都连接不上了。】
权限1---连接权限认证: Usage,连接(登陆)权限。建立一个用户,默认授予这个权限。该权限只能用于数据库登陆,不能做任何操作。客户端连接时,传递给服务器端的信息:客户端的hostname或者IP地址、数据库
服务器的IP地址或域名、数据库服务的端口号、数据库帐号名称、数据库帐号对应的密码。服务器端检查mysql库的user表是否存在user和password对应用户,host是否符合对应host,用户是否有Usage权限。通过身份认证
连接才能建立,否则拒绝连接。客户端连接成功后取得该链接的所有权限,在该连接生命周期内权限不会变,即使在别处更改了权限,也不会影响。例如:该用户没有delete权限,在连接后,管理员赋予它delete权限,可是得等
到此连接断开,下一次连接成功后才能获得delete权限。
例如:
192.168.1.1服务器上安装启动mysql服务。
mysql> INSERT INTO `user` VALUES ('192.168.1.1', 'user', password("pwd"), 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', '', '', '', '', '0', '0', '0', '0', '', null); User表里host字段是连接客户端的ip,和mysql服务器主机ip没有关系,为哪个客户端赋连接权限,就是哪个客户端主机的ip。
<5>Aborted_connects
用户名密码不对或没权限或连接超时(connect_timeout),被丢弃的连接数。
<6>max_connect_errors
最大连接失败数,max_connect_errors默认值为10,如果受信帐号错误连接次数达到10则自动堵塞,需要flush hosts来解除。如果你得到象这样的一个错误:
Host ’hostname’ is blocked because of many connection errors.
Unblock with ’mysqladmin flush-hosts’
在max_connect_errors次失败请求后,mysqld认定出错了(像来自一个黑客的攻击),并且阻止该站点进一步的连接,直到某人执行命令mysqladmin flush-hosts或者有reload权限的用户登录后,执行mysql>flush hosts。
mysql认为是恶意连接,会强制阻止此客户端连接。当此客户端有一次连接成功后,针对此客户端的max_connect_errors会清零。---这个参数没验证出来。
<7>thread_stack
每个连接线程被创建的时候,MySQL 给他分配的内存大小。 当 MySQL 创建一个新的连接线程的时候,是需要给他分配一定大小的内存堆栈空间,以便存放 客户端的请求 Query 以及自身的各种状态和处理信息。不过一般来说如果不是对 MySQL 的连接线 程处理机制十分熟悉的话,不应该轻易调整该参数的大小,使用系统的默认值(192KB)基本上 可以所有的普通应用环境。如果该值设置太小,会影响 MySQL 连接线程能够处理客户端请求的 Query 内容的大小,以及用户创建的 Procedures 和 Functions 等
<8>back_log
短时间内得到大量连接请求,并且超过max_connections,mysql暂时停止回答新请求之前,
允许被存在堆栈中的请求数量。操作系统的TCP/ip连接的侦听队列大小对这个队列大小有限制,
高于操作系统限制是无效的。

二、权限

1、Usage权限
  连接登陆。新增的用户默认赋予这个权限,且此usage权限不能被收回。
2、管理grant权限
  拥有grant option,就可以将自己拥有的权限授予其他用户(仅限于自己已经拥有的权限)
  mysql> grant Grant option on db.* to db@localhost;
  mysql> grant select on db.* to db@localhost;
  mysql>grant select *.* to ‘user’@’192.168.1.%’ identified by ‘pwd’;
3、管理权限process
  通过这个权限,用户可以执行SHOW PROCESSLIST和KILL命令。默认情况下,每个用户都可以执行SHOW PROCESSLIST命令,但是只能查询本用户的进程。kill命令杀死服务器线程。你总是能显示或杀死你自己的线程,
但是你需要PROCESS权限来显示或杀死其他用户和SUPER权限启动的线程。
mysqld为有process权限的用户保留一个额外的连接, 以便一个MySQL root用户能登录并检查,即使所有的正常连接在使用。所以当连接数达到最大时,普通连接建立不了的时候,拥有process权限的用户还是可以连接的。
shell>./mysqladmin –uroot –proot restart
mysql>kill 3;//杀死id=3的进程。 4、管理权限file
  拥有file权限才可以执行 select ..into outfile和load data infile…操作,但是不要把file, process, super权限授予管理员以外的账号,这样存在严重的安全隐患。
  管理权限(如 super, process, file等)不能够指定某个数据库,on后面必须跟*.*。
  mysql> grant file on *.* to db@localhost;
  mysql> load data infile ‘/home/mysql/db.txt’ into table db;
5、管理权限super
  这个权限允许用户终止任何查询;修改全局变量的SET语句;使用CHANGE MASTER,PURGE MASTER LOGS。修改存储过程需要super权限():
  mysql> grant super on *.* to 'ld'@'ip';
  mysql> purge master logs before ‘mysql-bin.000006′;
  管理权限(如 super, process, file等)不能够指定某个数据库,on后面必须跟*.*。
6、管理权限Shutdown
  shell>./mysqladmin –hip –uld –pld shutdown
7、管理权限replication slave
  拥有此权限可以查看从服务器,从主服务器读取二进制日志。
  mysql> grant replication slave on *.* to 1d@localhost;
  mysql> show slave hosts;
  mysql>show binlog events;
8、 replication client
  此权限可以查询master server、slave server状态。
  mysql> grant Replication client on *.* to ld@localhost;
  或:mysql> grant super on *.* to ld@localhost;
  mysql> show master status;
9、Reload权限
  必须拥有reload权限,才可以执行
  flush-hosts, flush-logs, flush-privileges, flush-status, flush-tables, flush-threads, refresh, reload命令。
   MySQL的FLUSH句法,用于清除或者重新加载内部缓存。而使用flush语句,你必须有reload权限。
(1)flush hosts
  清空hostname cache,hostname cache与连接时skip-name-resolve有关。
  Flush logs: 关闭当前的二进制日志文件并创建一个新文件,新的二进制日志文件的名字在当前的二进制文件的编号上加1。
(2)flush logs
  关闭当前的二进制日志文件并创建一个新文件,新的二进制日志文件的名字在当前的二进制文件的编号上加1。
(3)flush privileges
  这个也是经常使用的,每当重新赋权后,为了以防万一,让新权限立即生效,一般都执行一把,目地是从数据库授权表中重新装载权限到缓存中。
(4)flush tables
  关闭所有打开的表,同时该操作将会清空查询缓存中的内容。
(5)flush tables with read lock
  关闭所有打开的表,同时对于所有数据库中的表都加一个读锁,直到显示地执行unlock tables,该操作常常用于数据备份的时候。
(6)flush STATUS
  重置大多数状态变量到0。
(7)flush MASTER
   删除所有的二进制日志索引文件中的二进制日志文件,重置二进制日志文件的索引文件为空,创建一个新的二进制日志文件,不过这个已经不推荐使用,改成reset master 了。
(8)flush QUERY CACHE
  重整查询缓存,消除其中的碎片,提高性能,但是并不影响查询缓存中现有的数据,这点和Flush table 和Reset Query Cache(将会清空查询缓存的内容)不一样的。
(9)flush slave
  类似于重置复制吧,让从数据库忘记主数据库的复制位置,同时也会删除已经下载下来的relay log,与Master一样,已经不推荐使用,改成Reset Slave了。这个也很有用的。
  一般来讲,Flush操作都会记录在二进制日志文件中,但是FLUSH LOGS、FLUSH MASTER、FLUSH SLAVE、FLUSH TABLES WITH READ LOCK不会记录,因此上述操作如果记录在二进制日志文件中话,
会对从数据库造成影响。注意:Reset操作其实扮演的是一个Flush操作的增强版的角色。
(10) references
  有了REFERENCES权限,用户就可以将其它表的一个字段作为某一个表的外键约束。
11、 lock tables
  必须拥有lock tables权限,才可以使用lock tables
  mysql> grant lock tables on ld.* to p1@localhost;
  mysql> lock tables a1 read;
  mysql> unlock tables;。
12、show view
  必须拥有show view权限,才能执行show create view。
  mysql> grant show view on ld.* to ld@localhost;
  mysql> show create view v_shop;
13、show database
  通过show database只能看到你拥有的某些权限的数据库,除非你拥有全局SHOW DATABASES权限。
  对于ld@localhost用户来说,没有对mysql数据库的权限,所以以此身份登陆查询时,无法看到mysql数据库:
  mysql> show databases;
<1>skip_show_database
  防止不具有SHOW DATABASES权限的人们使用SHOW DATABASES语句。如果你担心用户能够看见属于其它用户的数据库,这样设置可以提高安全性。其效果取决于SHOW DATABASES权限:如果变量值为ON,只允许具有SHOW DATABASES权限的人们使用SHOW DATABASES 语句,并且该语句将显示所有数据库名。如果值为OFF,允许所有用户执行SHOW DATABASES,但只显示用户具有SHOW DATABASES或其它权限的数据库的名称。 14. excute
  查看并执行存在的Functions,Procedures的权限。
  mysql> grant execute on ld.* to 'ld'@'192.168.1.1' identified by 'ld';
  查看并执行存储过程的权限。例如:执行完这句ld用户就可以查看到ld库中的存储过程名字,但打开啥也没有,也能执行,但是不能修改。
  mysql> call pro_shop1(0001,@a);
  mysql> select @a;
15、alter routine权限
  必须具有alter routine的权限,才可以使用{alter |drop} {procedure|function}
  mysql> grant alter routine on ld.* to 'ld'@'%' identified by 'ld';
  mysql> drop procedure pro_shop;
16、create routine
  创建存储过程或函数。
  mysql> grant create routine on zz4.* to 'ld'@'%' identified by 'ld';//赋予权限
  mysql> revoke create routine on zz4.* from 'ld'@'%' identified by 'ld';//收回权限
  只赋予create routine权限后,修改存储过程,报错
  mysql> grant select on ld.* from 'ld'@'192.168.1.1' identified by 'ld';
  mysql> grant select routine on ld.* from '*'@'192.168.1.1' identified by 'ld'; 17. create temporary tables
  (注意这里是tables,不是table)
  必须有create temporary tables的权限,才可以使用create temporary tables.
  mysql> grant create temporary tables on ld.* to ‘ld′@’localhost’;
  [mysql@mydev ~]$ mysql -h localhost -u ld -p ld
  mysql> create temporary table tt1(id int);
18. create view
  必须有create view的权限,才可以使用create view
  mysql> grant create view on ld.* to ‘ld′@’localhost’;
  mysql> create view v_shop as select price from shop;
19. create user
  要使用CREATE USER,必须拥有mysql数据库的全局CREATE USER权限,或拥有INSERT权限。
  mysql> grant create user on *.* to ‘ld′@’localhost’;
  或:mysql> grant insert on *.* to ld@localhost;
20. index
  必须拥有index权限,才能执行[create |drop] index
21、create权限
  数据库、表或索引.
  必须有create的权限,才可以使用create table
  mysql> grant create on ld.* to ‘ld′@’localhost’;
22、insert权限
23、drop权限
24、delete权限
25、alter
修改表结构、数据库属性、存储过程。
26、update权限、
27、Select权限
查找数据库、表或索引。
mysql> select * from cat;
另外,连接后,查询只显示有权限的库和表和字段,新建的用户默认有Usage权限,和test库的访问权限,可以对它查询,修改,删除等。权限补充:

【1】proxy user     

Mysql伪装用户,自从MySQL 5.5 发布第一个版本以来,就在GRANT权限列表里面新增加了一条记录: PROXY。 不要以为这个是以前的MySQL Proxy 哦。其实这个是用来给用户做马甲用的。

伪装用户方法:

步骤1:

mysql> select version();//确保版本是5.5以上

步骤2:

mysql> select * from mysql.plugin; //检查是否已经加载test_plugin_server插件,默认5.5和5.6版本的mysql,都没有安装。

+--------------------+----------------------+

| name               | dl                   |

+--------------------+----------------------+

| test_plugin_server | auth_test_plugin.dll |

+--------------------+----------------------+

步骤3:

//如果没有安装插件,执行这句安装;

mysql> install plugin test_plugin_server soname 'auth_test_plugin.dll';

步骤4:

mysql> create user 'pp_ext'@'%' identified with test_plugin_server as 'pp';

步骤5:

mysql> grant proxy on 'pp'@'%' to 'pp_ext'@'%';

步骤6:

mysql> flush privileges;

步骤7:

退出,用用户名pp_ext密码:pp登陆。

报错:

1251-Client does not support authentication protocol requested by server;consider upgrading MySQL client

@@proxy_user 这个只读变量为NULL。没有伪装成功。得升级客户端版本。我用的是navicat.

更新完客户端后,查看一下伪装用户的权限

Mysql>show grants for ‘pp’@’%’;

操作更正常用户没什么区别。

<1> proxy_user 

【2】Mysqlaccess命令

用户权限检查程序

【3】mysql_setpermission

用于管理用户权限信息的交互式perl脚本。

一、MySQL的连接建立与权限的更多相关文章

  1. mysql 用户管理和权限设置

    用户管理 mysql>use mysql; 查看 mysql> select host,user,password from user ; 创建 mysql> create user ...

  2. Mysql新增用户,权限管理

    MySQL 赋予用户权限命令的简单格式可概括为:grant 权限 on 数据库对象 to 用户 一.grant 普通数据用户,查询.插入.更新.删除 数据库中所有表数据的权利. grant selec ...

  3. mysql修改数据库表权限

    ps:通常我用的是:1.“grant all on *.* to root@'%' identified by 'yourpassword';”——这个还可以顺带设置密码.2.“flush privi ...

  4. Linux下给mysql创建用户分配权限

    1.新建用户 //登录MYSQL @>mysql -u root -p @>密码 //创建用户 mysql> insert into mysql.user(Host,User,Pas ...

  5. MySQL用户管理和权限设置

    用户管理 mysql>use mysql; 查看 mysql> select host,user,password from user ; 创建 mysql> create user ...

  6. MySQL 数据库赋予用户权限操作表

    MySQL清空数据库的操作:truncate table tablename; MySQL 赋予用户权限命令的简单格式可概括为:grant 权限 on 数据库对象 to 用户  一.grant 普通数 ...

  7. MySQL用户账户管理/权限管理/资源限制

    MySQL 的权限表在数据库启动的时候就载入内存,当用户通过身份认证后,就在内存中进行相应权限的存取,这样,此用户就可以在数据库中做权限范围内的各种操作了. mysql 的权限体系大致分为5个层级: ...

  8. MySQL移动数据目录出现权限问题

    MySQL移动数据目录出现权限问题 环境: ubuntu 14.04.4 LTS 现象 今天把/var/lib/mysql下的数据文件移动到其他目录下,之后发现启动mysql报错,并且mysql无法运 ...

  9. MySql授权和撤销权限操作

    MySQL 赋予用户权限命令的简单格式可概括为: grant 权限 on 数据库对象 to 用户 用户后面可以加@'ip地址' identified by '密码' 例如: ' ' 上面的语句表示将 ...

随机推荐

  1. TCP/IP协议分层详解

    TCP/IP 和 ISO/OSI ISO/OSI模型,即开放式通信系统互联参考模型(Open System Interconnection Reference Model),是国际标准化组织(ISO) ...

  2. English Conversation – NUMBERS

    English Conversation – NUMBERS Share Tweet Share Tagged With: Numbers Study the pronunciation of num ...

  3. java Run to Line

    在运行Java代码时, 选择运行  Run AS java ,  出现    java Run to Line, 是因为程序还在运行,没有停止.在控制,点击右键.terminate  结束,在Run ...

  4. numpy-帮助文档 & 速查表.md

    目录 转相关资料: 速查表 速查代码 转相关资料: 官方手册 易佰教程 gitbook ZMonster's Blog 速查表 速查代码 # -*- coding: utf-8 -*- "& ...

  5. python 多重继承 深度优先还是广度优先

    我们常说,python2 是深度优先,python3 是广度优先, 其实具体来说是 python2.2 及其以前是深度优先 python2.3及其以后就是广度优先了 python官网 讲解1 以及su ...

  6. 解决:python 连接Oracle 11g 报错:ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务

    其次,将查询到的service_name替换sid即可:conn=cx_Oracle.connect('hr/admin@localhost:1521/EE.oracle.docker')

  7. tensorflow中 tf.train.slice_input_producer 和 tf.train.batch 函数(转)

    tensorflow数据读取机制 tensorflow中为了充分利用GPU,减少GPU等待数据的空闲时间,使用了两个线程分别执行数据读入和数据计算. 具体来说就是使用一个线程源源不断的将硬盘中的图片数 ...

  8. 生成一个文件夹中的所有文件的txt列表

    1.windows操作系统中 1.用管理员运行打开dos界面: 2.用cd转到相应的文件夹中: 3.用dir /b /on >list.txt来生成文件列表的txt. 2.Mac系统中 1.打开 ...

  9. 关于池化(pooling)理解!!!

    网上看到一个池化的解释是: 为了描述大的图像,可以对不同位置的特征进行聚合统计,如计算平均值或者是最大值,即mean-pooling和max-pooling 我的想法是,图像做卷积以后,将图像信息(特 ...

  10. hdu1215-七夕节-(埃氏筛+唯一分解定理)

    七夕节 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submiss ...