edx生产环境使用了mongo/mysql数据库。

edx中这两个数据库都用来干嘛呢,看这里

mysql/RDS for user-data and MongoDB for courseware content and discussion forums

既然总结了mongo,也顺便对mysql做个总结。

##mysql安装 sudo apt-get install mysql-server

一路回车,root密码为空

卸载(可能是为了重装)

sudo apt-get purge mysql-server mysql-client mysql-common mysql-client mysql-server

管理

权限管理

  • CREATE USER username IDENTIFIED BY ‘password’; //之后要使用GRANT分配权限,否则登录会错误,所以一般用下边的指令
  • GRANT ALL PRIVILEGES ON wordpress.* TO ‘username’@’localhost’ IDENTIFIED BY ‘password’; //创建并赋予用户在wordpress数据库中的所有权限
  • GRANT ALL PRIVILEGES ON wordpress.* TO ‘username’@’%’ IDENTIFIED BY ‘password’; //任意ip,注意需要把/etc/mysql/my.cnf的bind-address 注释
  • GRANT SELECT, UPDATE ON wordpress.* TO ‘username’@’localhost’ IDENTIFIED BY ‘password’; //只能执行 select 和 update 命令
  • GRANT Select ON . TO reader@192.168.1.123 IDENTIFIED BY “123456” //创建用户reader,只能从192.168.1.123访问,权限为所有数据库只读
  • REVOKE ALL PRIVILEGES ON . FROM ‘username’@’localhost’; //回收所有权限
  • 查看所有用户:select host,user,password from mysql.user;
  • 删除用户:drop user ‘jack’@’localhost’;

权限相关的细节参考MySQL 用户管理及权限管理Mysql初始化root密码和允许远程访问

创建数据库

1
2
CREATE DATABASE mytest; --创建数据库
USE mytest; --进入数据库

删除关联表

暂时弃用检查: SET FOREIGN_KEY_CHECKS=0;,完成之后 SET FOREIGN_KEY_CHECKS=1;

重设root 密码

以安全模式启动mysql,这样不需要密码可以直接以root身份登录,然后重设密码。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
:::text
sudo service mysql stop 
sudo mysqld_safe --skip-grant-tables --skip-networking &
mysql -u root  

mysql> use mysql;  
mysql> update user set password=PASSWORD("mynewpassword") where User='root';  
mysql> flush privileges;  
mysql > quit  

sudo service mysql restart 
mysql -u root -pmynewpassword  

也可以直接修改/etc/mysql/debian.cnf

##数据备份 参考edx数据迁移

##gui工具 MySQLWorkbench

数据

MYSQL默认的数据文件存储目录为/var/lib/mysql,在docker中可能这个信息有用(-v)

docker

run it

docker run –name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag

  • some-mysql is the name you want to assign to your container
  • my-secret-pw is the password to be set for the MySQL root user
  • tag is the tag specifying the MySQL version you want tags.

既有数据问题

  • 采用同版本mysql
  • 挂载/var/lib/mysql和/etc/mysql/conf.d,是否可能完全一样,换句话说这两个是文件,直接复制是否可用,相同的操作系统的话
  • 做个试验,设立新的用户,然后migrate,或者重跑ansible playbook

##参考资料