MySQL

分类下相关文章

MySQL 导出时忽略指定的大数据表

如果线上数据库中一些数据量比较大的表,不经常变动,在导出时,可以选择忽略,以节省下载时间。 例如,开发环境同步线上数据库的表结构。数据量大的表就没有导出的必要。 如何知道哪些表占用的磁盘空间最大 SELECT CONCAT('my_db_name', '.', table_name), CONCAT(ROUND(table_rows / 1000000, 2), 'M') rows, CONCAT(ROUND(data_length / ( 1024 * 1024 * 1024 ), 2), 'G ...

阅读全文...

Windows 上将 excel 导入 mysql

Windows 上的字符编码总是让人无语。 手头有个 excel 文件需要导入 mysql。印象中曾经把 csv 导入过 sql server。 我想 mysql 肯定也支持把 csv 导入。 mysql workbench 中,右键点击待导入的目标数据表,选择 Table Data Import Wizard 可以看到,支持 csv 和 json 的格式导入。 将 Excel 转换为 utf8 格式的 CSV 使用 WPS 先打开 excel 文件,另存为 csv 的格式。 但是问题来了,mysql workbench 压根就不支持 WPS 生成的 csv 文件的字符编码,显示为乱码。 ...

阅读全文...

WSL Ubuntu 18.04 中安装 MySQL 5.7

sudo apt install mysql-server-5.7 sudo mysqld 启动失败 2018-08-15T01:08:41.167354Z 0 [ERROR] Could not create unix socket lock file /var/run/mysqld/mysqld.sock.lock. 2018-08-15T01:08:41.167378Z 0 [ERROR] Unable to setup unix socket lock file. 修改启动方式 sudo service mysql start 之后问题解决,但是没有默认密码。设置 root 账号 ...

阅读全文...

MySQL 通过经纬度查询附近的目标

之前一直使用 Redis 的 GeoHash 来查询附近的目标,但是为了架构的简化,我决定尝试一下 MySQL 来进行查询。 SELECT name, latitude, longitude, SQRT( POW(69.1 * (latitude - [target_lat]), 2) + POW(69.1 * ([target_lng] - longitude) * COS(latitude / 57.3), 2)) AS distance FROM TableName HAVING distance < [distance] ORDER BY distance; ...

阅读全文...

MySQL 8 引入索引 VISIBLE 与 INVISIBLE 的实战意义

实际使用场景: 线上服务的数据库中某个字段已经创建了索引,但是后续运营过程中,发现这个索引并没有实际用途,反而影响了写入速度。那么,我们就会想去掉这个字段的索引。可是,在数据量非常大的情况下,新建索引,删除索引都是一件非常耗时的操作。所以,删除索引的操作,马虎不得。一旦发现这个索引还有其他业务用到,再重新建索引,耗时的创建过程会严重影响线上业务。 这时,index 的 visible 和 invisible 就非常实用了。可以先将该索引设置为 invisible,这样优化器就会忽略这个索引,但是索引依然存在于引擎内部。而设置 invisible 和 visible 操作的耗时又非常少,对业务基 ...

阅读全文...

MySQL 8.0 的文档型数据存储 - Document Store

本质上就是实现了一套 MongoDB,然而我对 MongoDB 并不感冒。。。 什么是文档 Document A Document is a set of key and value pairs, as represented by a JSON object. 文档是一堆键值对的集合,表现为 JSON 结构。 例如: { "domain": "www.sunzhongwei.com", "title": "大象笔记" } collection 感觉类似 mongodb 里 collection 的概念, ...

阅读全文...

MySQL 全文检索方案 - FULLTEXT 索引

尽量不要使用 Like 由于 MySQL LIKE '%text%' 是无法使用索引的,Like 能用上索引的唯一可能 LIKE 'text%' 所以实际使用中 LIKE 毫无实用价值。。。 mysql 5.7.6 之后支持了中日韩文的全文检索 查看了本机的 mysql 版本 mysqld --version mysqld Ver 5.7.18-0ubuntu0.16.10.1 for Linux on x86_64 ((Ubuntu)) A full-text index in MySQL is an index of type FULLTEXT. 实际上,就是增加了一个新的索 ...

阅读全文...

Ubuntu 18.04 安装 mysql 8.0

卸载之前安装的 mysql 5.7 sudo apt-get autoremove --purge mysql-server sudo apt-get remove mysql-server sudo apt-get autoremove mysql-server sudo apt-get remove mysql-common 安装 mysql 8.0 首先需要去 mysql 官网 https://dev.mysql.com/downloads/repo/apt/ 下载一个 Ubuntu / Debian (Architecture Independent), DEB Pack ...

阅读全文...

ubuntu 18.04 为 mysql 设置 root 初始密码

ubuntu 18.04 上安装 mysql 5.7 之后,默认没有设置 root 密码,印象中之前是有一个引导界面的,现在似乎去掉了。 设置 mysql 初始密码需要使用命令 sudo mysql_secure_installation 按照提示,一步步操作即可 root 连接需要 sudo 很奇葩,ubuntu 18.04 上 mysql -uroot -p ERROR 1698 (28000): Access denied for user 'root'@'localhost' 永远会报这个错误。 解决方法就是加上 sudo... sudo mysql -uroot -p 带来的问 ...

阅读全文...

通过 mysql select 结果导出到 txt 文本批量提交历史内容到熊掌号

周六花了一个小时支持了 MIP 网页,今天再接再厉将历史内容全部提交到熊掌号。 首先将数据库中的所有笔记的链接导出: SELECT CONCAT("https://www.sunzhongwei.com/mip/", slug) FROM articles order by id desc INTO OUTFILE '/tmp/urls.txt' 但是报错 ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this ...

阅读全文...

MySQL 中使用条件语句输出查询结果

例如,我想把数据表中的数据导出成可读的结果。 select `pay_status`, if(pay_status = 0, '未支付', '已支付') as pay_status from order 0 未支付 0 未支付 1 已支付 ...

阅读全文...

使用 MySQL 存储 schema-less 数据的探索

table design: 表结构做成 id, key, value 还是 key, value 比较好。 按照 Bret Taylor 的分享,比较好的设计是 added_id -> INT NOT NULL AUTO_INCREMENT PRIMARY KEY id -> UNIQUE KEY updated -> KEY body -> json 之所以加上自增的 added_id, 是因为 Mysql InnoDB 是按照主键顺序在磁盘上顺序存储 数据的。这样就能保证新数据总是能写在旧数据的后面,因为新数据读取的频率总会高于 旧数据,磁头不会波动太大。 e. ...

阅读全文...

使用 crontab & mysqldump 对 MySQL 数据库进行自动定时备份

crontab 配置 crontab 中添加 30 4 * * * /usr/bin/mysqldump -uuser db > /path/to/backups/db-`date +"\%Y_\%m_\%d_\%H"`.sql 即每天凌晨 4 点半进行自动备份 注意,这里不要加 -p 参数。 如何自动输入密码 不安全的方式是 直接在 crontab mysqldump 命令的参数中用 -p 指定密码,但是这样做有巨大的风险。 因为,任何用户都可以通过 ps axuw | grep mysqldump 看到进程的命令参数。 一种安全的方式是 在用户的根目录添加配置文 ...

阅读全文...

MySQL 替换 text 字段中的指定字符串

昨天将博客启用了 HTTPS,发现一个包含 js 的 markdown 文章显示异常。 vuejs 中如何优雅的获取 Input 值 导致异常的原因是,https 页面引用了 http 的 js 文件,即 vuejs 的 cdn 链接使用了 http 的。 解决方法就是直接在 mysql 中进行替换 UPDATE articles SET content = REPLACE(content, "http", "https") where slug = 'how-to-get-input-value-in-vuejs'; 如果需要批量替换数据表中的 h ...

阅读全文...

MySQL 保存 emoji 表情失败报错

有朋友在博客评论里反馈,无法提交带 emoji 表情的评论。第一反应是数据库编码问题。 由于一直不习惯使用 emoji,所以这个问题一直没发现。 Laravel 的报错信息 production.ERROR: SQLSTATE[HY000]: General error: 1267 Illegal mix of collations (utf8_unicode_ci,IMPLICIT) and (utf8mb4_unicode_ci,COERCIBLE) for operation '=' MySQL CHARSET 与 COLLATE 的区别 https://stackoverflow. ...

阅读全文...

近期节日

2018年11月17日 国际大学生节
2018年11月20日 国际儿童日
2018年11月21日 世界问候日
2018年11月22日 小雪
2018年11月22日 感恩节
2018年12月01日 世界艾滋病日
2018年12月03日 国际残疾人日
2018年12月07日 大雪
2018年12月09日 "一二九"运动纪念日
2018年12月09日 世界足球日
2018年12月10日 世界人权日
2018年12月12日 西安事变纪念日
查看更多节日