Docker-学习五(Mysql多实例安装)

一、数据卷准备

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 中常见的数据类型如下:

  1. 整数类型 包括 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;  #刷新权限

然后退出后重新登录就可以了.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值