ERROR 1010 (HY000): Error dropping database (can't rmdir './******', errno: 39)
今天操作数据库出现以下错误提示:
ERROR 1010 (HY000): Error dropping database (can't rmdir './******', errno: 39)
字面意思是说删除数据失败,不能删除目录./******数据库版本信息:
mysql> select version();
+-----------+
| version() |
+-----------+
| 5.7.2 |
+-----------+
1 row in set (0.00 sec)
mysql> use 数据库名;
Database changed
mysql> show tables;
Empty set (0.00 sec)
发现数据库中已经没有表了,这个时候为什么drop database不成功呢?奇怪了......
通过以下命令查看数据库文件所在目录:
mysql> select @@datadir;
+--------------+
MyISAM几个容易忽视的配置选项
MyISAM在读操作占主导的情况下是很高效的。可一旦出现大量的读写并发,同InnoDB相比,MyISAM的效率就会直线下降,而且,MyISAM和InnoDB的数据存储方式也有显著不同:通常,在MyISAM里,新数据会被附加到数据文件的结尾,可如果时常做一些 UPDATE,DELETE操作之后,数据文件就不再是连续的,形象一点来说,就是数据文件里出现了很多洞洞,此时再插入新数据时,按缺省设置会先看这些洞洞的大小是否可以容纳下新数据,如果可以,则直接把新数据保存到洞洞里,反之,则把新数据保存到数据文件的结尾。之所以这样做是为了减少数据文件的大小,降低文件碎片的产生。但InnoDB里则不是这样,在InnoDB里,由于主键是cluster的,所以,数据文件始终是按照主键排序的,如果使用自增ID做主键,则新数据始终是位于数据文件的结尾。了解了这些基础知识,下面说说MyISAM几个容易忽视的配置选项:
concurrent_insert:
通常来说,在MyISAM里读写操作是串行的,但当对同一个表进行查询和插入操作时,为了降低锁竞争的频率,根据concurrent_insert的设置,MyISAM是可以并行处理查询和插入的:
MySQL大表优化方案
当MySQL单表记录数过大时,增删改查性能都会急剧下降,可以参考以下步骤来优化:
单表优化
除非单表数据未来会一直不断上涨,否则不要一开始就考虑拆分,拆分会带来逻辑、部署、运维的各种复杂度,一般以整型值为主的表在千万级
以下,字符串为主的表在五百万
以下是没有太大问题的。而事实上很多时候MySQL单表的性能依然有不少优化空间,甚至能正常支撑千万级以上的数据量:
字段
-
尽量使用
TINYINT
、SMALLINT
、MEDIUM_INT
作为整数类型而非INT
,如果非负则加上UNSIGNED
-
VARCHAR
的长度只分配真正需要的空间 -
使用枚举或整数代替字符串类型
-
尽量使用
TIMESTAMP
而非DATETIME
, -
单表不要有太多字段,建议在20以内
-
避免使用NULL字段,很难查询优化且占用额外索引空间
-
用整型来存IP
索引
-
索引并不是越多越好,要根据查询有针对性的创建,考虑在
WHERE
和ORDER BY
命令上涉及的列建立索引,可根据EXPLAIN
来查看是否用了索引还是全表扫描
标签: mysql
ERROR 1286 (42000): Unknown table engine 'InnoDB'
今天在操作数据的的时候,突然提示以下错误: ERROR 1286 (42000): Unknown table engine 'InnoDB'mysql> select version(); +-----------+ | version() | +-----------+ | 5.1.57 | +-----------+ 1 row in set (0.01 sec)mysql> show engines; +------------+---------+-----------------------------------------------------------+--------------+------+------------+ | Engine | Support | Comment | Transactions | XA | Savepoints | +------------+---------+-----------------------------------------------------------+--------------+------+------------+ | CSV | YES | CSV storage engine | NO | NO | NO | | MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO | | MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO | | MyISAM | DEFAULT | Default engine as of MySQL 3.23 with great performance | NO | NO | NO | +------------+---------+-----------------------------------------------------------+--------------+------+------------+4 rows in set (0.00 sec) mysql> show variables like 'have_innodb%'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | have_innodb | NO | +---------------+-------+ 1 row in set (0.00 sec) 至此发现数据库不支持INNOD引擎!!! mysql> show variables like '%dir%';
mysql 备份指定前缀的数据库信息
mysql_dump.py 备份指定前缀的数据库信息,备份的文件支持gzip压缩!生成的文件名字指定了的DB名称加上导出数据的时间!
(1)运行脚本效果如下:
请输入连接数据库的账号:root
请输入连接数据库的密码:
请输入连接数据库的地址(默认:127.0.0.1):127.0.0.1
请输入导出数据库的前缀:test
请输入连接数据库的端口号(默认:3306):3306
请输入备份数据库的路径(默认:/home/,记得添加最后的斜线):/home/dbback/
备份【test】数据成功!!
备份【test001】数据成功!!
备份【test02】数据成功!!
备份【test07】数据成功!!
ERROR 1418 (HY000): This function has none of DETERMINISTIC, NO SQL
今天使用Mysql中,通过create function创建function 的时候出现以下报错,特总结如下:ERROR 1418 (HY000): This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable)
中文的大概意思是:
此function函数在其声明中没有任何确定,NO SQL或READS SQL DATA,并且启用了二进制日志记录(您可能希望使用较不安全的log_bin_trust_ function_creators变量
mysql 忘记的数据库密码
mysql 忘记的数据库密码
mysql -uroot -p
Enter password:
ERROR 1045 (28000): Access denied for user ‘root’@’localhost’ (using password: YES)
root 密码可以丢失或者忘记了。解决思路:目前是进入不了数据库的情况,所以我们要考虑是不是可以跳过权限。因为在数据库中,MySQL 数据库中 user 表记录着我们用户的信息。
解决方法:启动 MySQL 数据库的过程中,可以这样执行:
/usr/local/mysql/bin/mysqld_safe –defaults-file=/etc/my.cnf –skip-grant-tables &
这样启动,就可以不用输入密码,直接进入 MySQL 数据库了。然后在修改你自己想要改的 root 密码即可。
update mysql.user set password=password(‘04d20fb9c38c9′) where user=’root’
MySQL性能测试工具--mysqlslap使用详解
mysql 为用户添加资源限制
在使用MySQL中Grant新增用户的时候,为用户添加资源限制
在MySQL中,你可以为单独的用户设置MySQL的资源使用限制。可用的资源限制如下:
- MAX_QUERIES_PER_HOUR: 允许的每小时最大请求数量
- MAX_UPDATES_PER_HOUR: 允许的每小时最大更新数量
- MAX_CONNECTIONS_PER_HOUR: 允许的每小时最大连接(LCTT译注:其与 MySQL全局变量: max_user_connections 共同决定用户到数据库的同时连接数量)数量
- MAX_USER_CONNECTIONS: 对服务器的同时连接量
mysql 批量删除指定前缀的表
mysql批量删除指定前缀的表,巧妙的使用mysql中提供的concat函数;CONCAT()函数用于将多个字符串连接成一个字符串,通过使用这个函数巧妙的查询mysql中information_schema数据库中tables表拼接成drop语句,然后执行:
Select CONCAT( 'drop table ', table_name, ';' ) FROM information_schema.tables Where table_name LIKE 'a_%';
热门日志
分类
- Php(101)
- Java(8)
- Mysql(32)
- Ajax(2)
- Jsp(1)
- Struts(8)
- Linux(71)
- JavaScript(39)
- Staruml(0)
- Mouth(1)
- Html(6)
- Windows(8)
- Message(12)
- Lua(10)
- Compute(1)
- Redis(7)
- Nginx(11)
- Jquery(1)
- Apache(1)
- cocos2d-x(8)
- about(1)
- ssdb(1)
- Mac(7)
- C(1)
- memcache(1)
- Python(30)
- Vim(8)
- sed(2)
- ansible(3)
- awk(4)
- shell(3)
- Django(4)
- git(7)
- bat(4)
- svn(0)
- docker(1)
- Tornado(1)
- go(1)
- 架构(16)
- Vue(1)
最新日志
- Docker 那些事
- 欢迎您关注“刘善海价值分享”微信公众号!
- Module build failed (from ./node_modules/sass-loader/dist/cjs.js):
- Linux vim/vi下backspace(退格键)出现^? 或^H
- python 如何通过subprocess.call调用自定义alias别名
- python2 python3中long类型的区别
- 10 个 Linux 中方便的 Bash 别名
- 'python' engine because the 'c' engine does not support regex separators
- importError c extension: No module named np_datetine not buit
- 四个提高工作效率的小技巧