MySQL

来自夜航船
跳到导航 跳到搜索

MySQL是最流行的关系型数据库管理系统,在Web应用方面MySQL是最好的RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之一。

SQL基础教程

参考手册

新建用户:MySQL 5.7 MySQL 8.0

冷知识

CREATE DATABASE creates a database with the given name. To use this statement, you need the CREATE privilege for the database.

CREATE SCHEMA is a synonym for CREATE DATABASE as of MySQL 5.0.2.

学习日志

查看数据库大小

USE information_schema;

SELECT CONCAT(ROUND(SUM(data_length/1024/1024),2),'MB') AS DATA FROM TABLES WHERE table_schema='mediawiki';
SELECT CONCAT(ROUND(SUM(data_length/1024/1024),2),'MB') AS DATA FROM TABLES WHERE table_schema='confluence';

开启远程连接

USE mysql; 
UPDATE user SET host ='%' WHERE user = 'root';  -- ERROR 1062 (23000), 但记住 % 的含义也就够了
FLUSH PRIVILEGES;

尝试切换 MediaWiki 数据库

新建测试用户

CREATE USER testwk IDENTIFIED BY 'testwk';
CREATE DATABASE test_db
  DEFAULT CHARACTER SET utf8
  DEFAULT COLLATE utf8_bin;
GRANT ALL PRIVILEGES ON test_db.* TO 'testwk'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;

导出数据库

  1. SQLyog 导出,再导入失败;Error occured at:2018-03-14 14:09:57 Line no.:22 Error Code: 1046 - No database selected
  2. 阿里云 DMS 导出,SQLyog 导入失败;Error occured at:2018-03-14 14:09:57 Line no.:22 Error Code: 1046 - No database selected
  3. 阿里云 DMS 导出,CentOS 终端导入失败;ERROR 2006 (HY000): MySQL server has gone away No connection. Trying to reconnect...

操作指令:

use bdm253597152_db;
set names utf8;
source /root/wk.sql;

好忧伤!

其实3月份我导出/导入成功过一次,当时导出用的是阿里云备份工作,导入用SQLyog,再尝试一次。其实所有的错误和失败,都是源于你对这个软件/命令的一知半解。

阿里云备份工具导出数据库,SQLyog 导入成功,修改 LocalSettings.php,成功!

无论是共享虚拟主机标准版的800M,还是独享虚拟主机普惠版1024M数据库空间,都不适合建 MediaWiki 站点,删除了381个词条,数据切换之后,仍占用空间 286M,再次报警,只是很短的时间问题。

重要

因为数据库切换成功,我尝试将原来伺服在虚拟主机中的 Wiki 程序,迁移到 ECS,修改:

$wgScriptPath = "/echo";
$wgServer = "http://www.christen.cn";

注释伪静态化配置,网站可以正常跑起来,可以分别读写数据库,但是:

  1. 我的心结语法高亮有问题,SyntaxHighlight_GeSHi 不工作;
  2. 因为主站用了静态化,图片也不能平滑展示,即在wiki编辑之后,echo滥图;

语法高亮似乎在保存数据的时候,调用了插件写入JavaScript和CSS,切换站点时,找不到路径。图片的故障,比较好理解。

推论:如果一定要迁移网站文件 + 数据库,保持同样的目录和静态化规则,是有希望成功的。

把镜像目录打包,删除源文件:

tar zcvf echo.tar.gz echo/

不再纠结这个问题。独享虚拟主机 + ECS,其实是资源的最优配置,两边的磁盘空间,都能有效利用!

MySQL server has gone away 解决方案

修改 my.cnf // 未测试

1. 应用程序长时间的执行批量的MySQL语句

wait_timeout=2880000
interactive_timeout = 2880000

2. 执行一个SQL,但SQL语句过大或者语句中含有BLOB或者longblob字段

max_allowed_packet = 500M