一、数据卷准备
1.创建数据卷
docker volume create mysql_dbdata
docker volume ls # 查看
docker volume inspect mysql_dbdata
删除数据卷
$ docker rm -v <container_id> # 删除容器及关联
$ docker volume rm <volume_name> # 删除数据卷
2.创建数据卷容器
docker run -it -v mysql_dbdata:/var/lib/mysql/ --name mysql_dbdata ubuntu
默认-v 挂载的是匿名数据卷,可先创建数据卷指定名称,再挂载到宿主机本地目录。 ":"前为数据卷名称,后面为宿主机地址。(这点与数据卷挂载时不一致,数据卷挂载":"前面是宿主机本地地址,后面是容器内地址。)
默认执行权限是RW,若想设置只读需添加:ro
例如:
docker run -it -v mysql_dbdata:/var/lib/mysql/:ro --name mysql_dbdata ubuntu
3.创建容器来挂载mysql_dbdata的数据。
docker run -it --volumes-from mysql_dbdata --name db1 ubuntu
docker run -it --volumes-from mysql_dbdata --name db2 ubuntu
db1和db2 都挂载同一个数据卷到相同的/var/lib/mysql/ 目录。三个容器任何一方在该目录下的写入,其他容器都可以看到。
二、容器启动
1.启动mysql容器并挂载数据卷容器
docker run -d -p 23333:3306 --name db_mysql_1 -v $(PWD)/my.cnf:/etc/mysql/my.cnf --volumes-from db1 -e MYSQL_USER="lfc" -e MYSQL_ROOT_PASSWORD=123456 mysql/mysql-server
2.宿主机查看容器日志
#实时查看docker容器日志
$ sudo docker logs -f -t --tail 行数 容器名
#例:实时查看docker容器名为s12的最后10行日志
$ sudo docker logs -f -t --tail 10 s12
三、数据迁移备份
1.备份数据
(–volumes-from mysql_dbdata)新建容器挂载该容器卷
(-v $(pwd):/backup)并且将宿主机当前目录挂载到新容器backup下。
(tar cvf /backup/backup.tar /var/lib/mysql)将容器数据卷内数据打包至backup下。
docker run --name backup_copy --volumes-from mysql_dbdata -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /var/lib/mysql
2.数据恢复
新建数据卷容器
docker run -v /var/lib/mysql --name mysql_dbdata2 ubuntu /bin/bash
另创建一个容器挂载mysql_dbdata2 的容器并使用untar将备份文件解压到挂载的容器卷中。
docker run --name copydata --volumes-from mysql_dbdata2 -v $(pwd):/backup busybox tar xvf /backup/backup.tar
四、加载新实例
1.新建实例加载mysql_dbdata2数据卷容器
docker run -d -p 24444:3306 --name db_mysql_1 -v $(PWD)/my.cnf:/etc/mysql/my.cnf --volumes-from mysql_dbdata2 -e MYSQL_USER="lfc" -e MYSQL_ROOT_PASSWORD=123456 mysql/mysql-server
五、Mysql使用
1.基本操作
操作 | SQL |
查询所有数据库 | show databases; |
查看活跃连接 | show processlist; |
创建数据库 | create database blog default character set utf8; |
查看数据库的默认字符集 | show create database blog; |
删除数据库 | drop database blog; |
修改数据库 | alter database blog default character set gbk; |
选择数据库 | use blog; |
看所有表 | show tables; |
创建表 | create table student(sid int,sname varchar(20)); |
查看表结构 | desc student; |
删除表 | drop table student; |
添加字段 | alter table student add sgender varchar(2); |
删除字段 | alter table student drop sgender; |
修改字段类型 | alter table student modify sgender varchar(100); |
修改字段名称 | alter table student change sgender gender varchar(2); |
修改表名称 | alter table student rename to teacher; |
2.问题汇总
1.ERROR 1130
ERROR 1130: Host '192.168.1.3' is not allowed to connect to this
mysql不允许远程登录,需使用命令行对其进行设置,具体方法有两种,授权法和改表法。
1.使用root权限登录
mysql -u root -p
2.改表法
使用localhost的主机登录,登入后更改mysql数据库中user表里的host项,“localhost"更改成”%"。% 号为所有,也可改成某固定IP。
命令
use mysql;
update user set host = '%' where user = 'root';
select host, user from user;
3.授权法
ALTER USER 'lfc'@'%' IDENTIFIED BY '123456' PASSWORD EXPIRE NEVER;
ALTER USER 'lfc'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
mysql8.0之后进行了修改,授权和创建用户是分开设置的。
create user 'lfc'@'%' identified by '123456';
grant ALL PRIVILEGES on *.* TO 'lfc'@'%' ; # 前面的*是指定数据库,后面的*指定的是表。
创建账户:create user ‘用户名’@‘访问主机’ identified by ‘密码’;
赋予权限:grant 权限列表 on 数据库 to ‘用户名’@‘访问主机’ ;(修改权限时在后面加with grant option)
2.Error Code: 1044.
Error Code: 1044. Access denied for user 'root'@'%' to database
授权的权限没有打开: Grant_priv is set to N for root@%. 修复下
UPDATE user SET Grant_priv='Y', Super_priv='Y' WHERE User='lfc';
FLUSH PRIVILEGES; #刷新
MySQL 常见数据类型
在 MySQL 中常见的数据类型如下:
- 整数类型 包括 TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT,浮点数类型 FLOAT 和
DOUBLE,定点数类型 DECIMAL。 2) 日期/时间类型 包括 YEAR、TIME、DATE、DATETIME 和
TIMESTAMP。 3) 字符串类型 包括 CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM 和
SET 等。 4) 二进制类型 包括 BIT、BINARY、VARBINARY、TINYBLOB、BLOB、MEDIUMBLOB 和
LONGBLOB。
时区问题
select now(); #查看mysql系统时间。和当前时间做对比
set global time_zone = '+8:00'; #设置时区更改为东八区
flush privileges; #刷新权限
然后退出后重新登录就可以了.