MySQL主从 1061 报错, 键冲突, 产生的原因一般为用户在主库上建立索引导致, 可以通过在从库手动删除冲突的索引解决

1
2
3
4
5
6
7
8
9
10
# 先暂停主从同步
mysql> stop slave for channel "dbtest"; # MySQL5.7多源复制语法
mysql> stop slave; # 单主复制语法

# 删除冲突的索引
ALTER TABLE `tableNmae` DROP INDEX `indexName`;

# 开启主从同步
mysql> start slave for channel "dbtest"; # MySQL5.7多源复制语法
mysql> start slave; # 单主复制语法

语法

grant 权限 on 数据库.数据表 to '用户'@'主机';

主机的表示方式

  • 192.168.10.85 单主机授权方式
  • localhost 本地授权 方式
  • % 不限制远程主机的 IP 地址
  • 192.168.10.% 网段批量授权

权限列表

权限 说明
usage 连接(登录)MySQL 的权限, 每建立一个用户, 就会自动授予usage权限. 该权限只能用于数据库登录, 不能执行任何操作, 且 usage 权限不能被回收♻️
file 拥有 file 权限才可以执行 select ... into outfileload data infile… 操作, 但是不要把 file, process, super 权限授予管理员以外的账号, 否则存在严重的安全隐患
super 该权限允许用户终止任何查询; 修改全局变量的 SET 语句; 使用 change master purge master logs
select 必须拥有 select 权限才可以使用 select查询数据
insert 必须拥有 insert 权限才可以使用insert向表中插入数据
update 必须拥有 update 权限才可以使用update更新表中的记录📝
delete 必须拥有 delete 权限才可以使用delete删除表中的数据
alter 必须拥有 alter 权限才可以使用alter命令更改表的属性
alter routine 必须拥有 alter routine 权限才可以执行 alter/drop procedure/function命令
create 必须拥有 create 权限才可以使用create命令建表
create routine 必须拥有 create routine 权限才可以执行 create/alter/drop procedure/function
create temporary tables 必须有create temporary tables的权限,才可以使用create temporary tables
create view 执行create view创建视图的权限
create user 执行create user创建用户的权限(拥有 insert 权限也可以通过直接向 mysql.user 表中插入数据来创建用户)
show database 通过 show database 只能看到你拥有的某些权限的数据库, 除非你拥有全局show database权限
show view 必须拥有show view权限才可以执行show create view查询已经创建的视图
index 必须拥有 index 权限才能创建和删除索引 create/drop index
excute 必须拥有 excute 权限才可以执行存在的函数(Function)和存储过程(Procedures)
event 如果event 的使用频率较低, 建议使用 root 用户进行管理和维护. (要使event 起作用, MySQL 的常量 global event_scheduler必须为on或者1)
lock tables 锁表🔐权限
references 创建外键约束权限
reload flush talbes/logs/privileges 权限
replication client 拥有此权限可以查询master slave状态
replication slave 拥有此权限可以从主库读取二进制日志
shutdown 关闭 mysql 的权限
grant option 可以将自己拥有的权限授权给其他用户(仅限于自己拥有的权限)
process 拥有此权限可以执行show processlistkill命令. 默认情况下, 每个用户都可以执行该命令, 但是只能查看本用户的进程
all privileges 所有权限. 使用with grant option可以连带授权 grant all privileges on *.* to 'polarsnow'@'%' with grant option;
truncate truncate 权限其实就是 create+drop 权限的组合
drop 删库删表删索引删视图等权限

注意: 管理权限(如 super, process, file 等) 不能指定某个数据库授权, on关键字之后必须跟 *.*

查看用户授权

1
mysql> show grants for username;

回收权限

1
mysql> revoke select,update,insert,delete on *.* from username;

刷新权限

1
mysql> flush privileges;

RHEL 也是大力支持 Docker 的系统发行版, 但是由于 Docker 最开始使用的 AUFS 存储引擎在 RHEL 上并不支持, 所以 RHEL 自主研发了 device mapper 存储引擎专门适配自己的系统. 这个东西确实很牛 X, 但是实际用起来有多不爽恐怕只有用过才会知道吧.

最重要的是: Docker 官方声明, RHEL 7 不支持 Docker CE, 在 RHEL 系统上, 只能安装 Docker EE 版本, 所以本篇不做详细介绍

系统需求

  • 64bit RHEL7

卸载老版本 Docker Engine

老版本的 Docker 被叫做 dockerdocker-engine 如果系统当前有这些版本的系统, 那么你需要先卸载他们

1
2
3
4
5
$ sudo yum remove docker \
docker-common \
container-selinux \
docker-selinux \
docker-engine

需要 yum 命令的回显显示没有相关的软件包被安装

/var/lib/docker 目录下, 包含了镜像, 容器, 数据卷网络配置

安装 Docker EE

设置软件源

  • /etc/yum.repos.d/ 下清除所有跟 docker 相关的软件仓库配置
  • /etc/yum/vars/ 下创建两个变量
    • Docker EE 的 URL
1
$ sudo sh -c 'echo "<DOCKER-EE-URL>" > /etc/yum/vars/dockerurl'
- RHEL 的版本 
1
$ sudo sh -c 'echo "<VERSION-STRING>" > /etc/yum/vars/dockerosversion'
  • 安装 yum 工具集yum-utils 以得到 yum-config-manager命令
1
$ sudo yum install -y yum-utils
  • 配置软件源
1
2
3
$ sudo yum-config-manager \
--add-repo \
<DOCKER-EE-URL>/docker-ee.repo

安装 Docker EE

  • 更新 yum 软件源索引
1
$ sudo yum makecache fast
  • 安装 Docker EE
1
$ sudo yum -y install docker-ee
  • 启动 Docker EE
1
$ sudo systemctl start docker
  • 验证 Docker EE 正常运行
1
$ sudo docker run hello-world

参考官方文档:

Ubuntu 是 docker 第一个支持的系统发行版, 截止到目前, 我们也依然推荐在生产环境中使用 Ubuntu 系统. 虽然我也很喜欢 CentOS, 但是在 docker 这件事儿中, Ubuntu 确实是最合适的系统选择

系统需求

  • 64bit Yakkety 16.10
  • 64bit Xenial 16.04 (LTS) <== 个人推荐使用此版本的 Ubuntu 发行版
  • 64bit Trusty 14.04 (LTS)

卸载老版本 Docker Engine

老版本的 Docker 被叫做 dockerdocker-engine 如果系统当前有这些版本的系统, 那么你需要先卸载他们

1
$ sudo apt-get remove docker docker-engine

需要 apt-get 命令的回显显示没有相关的软件包被安装

/var/lib/docker 目录下, 包含了镜像, 容器, 数据卷网络配置

Ubuntu Trusty 14.04 额外安装的软件包

在官方文档中, 强烈推荐 Ubuntu14.04版本如果使用aufs 存储引擎, 那么一定要安装以下软件包

1
2
3
4
5
$ sudo apt-get update

$ sudo apt-get install \
linux-image-extra-$(uname -r) \
linux-image-extra-virtual

安装 Docker

从软件源中安装 Docker

配置软件仓库 Docker-CE

  • 安装软件包, 以允许apt命令可以通过 https 协议使用软件源(repository)
1
2
3
4
5
$ sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
software-properties-common
  • 安装 Docker 官方 GPG key
1
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
  • 配置 stable 版本的软件源
1
2
3
4
$ sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"

安装 Docker CE

  • 更新系统软件
1
$ sudo apt-get update
  • 安装最新版本的 Docker CE
1
$ sudo apt-get install docker-ce
  • 在生产环境, 你可能需要安装指定版本的 Docker,
1
$ sudo apt-get install docker-ce=<VERSION>

docker-ce 在安装好后自动启动

  • 启动 Docker CE
1
2
$ sudo systemctl start docker
$ sudo systemctl enable docker
  • 验证 Docker 服务正常运行
1
$ sudo docker run hello-world
  • 添加用户到 Docker 组

在生产环境中, 不是每个人登录都是使用 root 用户, 可能需要给普通用户操作 docker 的权限, 那么将该用户添加到 docker 组是简单方便的方式

1
$ sudo usermod -aG docker your-user
  • 升级 Docker CE
1
$ sudo apt-get update

使用软件包直接安装

  • 下载对应版本的 .deb 软件包

Docker CE: Go to https://download.docker.com/linux/ubuntu/pool/stable-17.03/amd64/ and download the .deb

  • 安装软件包
1
$ sudo dpkg -i /path/to/package.deb

The Docker daemon starts automatically.

  • 验证 Docker 服务正常运行
1
$ sudo docker run hello-world

卸载 Docker CE

  • 卸载 Docker CE
1
$ sudo apt-get purge docker-ce
  • 镜像/容器/数据卷和自定义配置文件不会随着卸载而自动删除, 你需要手动去清除他们
1
$ sudo rm -rf /var/lib/docker

Docker CE For Windows 同样分为了两个版本, 一个是稳定版; 一个是开发版

下载链接:

系统要求:

  • Windows 10 Pro Enterprise and Education (1511 November update, Build 10586 or later) 64bit
  • Microsoft Hyper-V

双击安装文件: InstallDocker.msi 打开安全程序界面. 按照正常的 Windows 软件安装流程, 我接受, 下一步, 下一步即可完成 docker 的安装

提示: mac 版本和 windows 版本的 docker 仅限于体验. 甚至连测试环境都不推荐使用 mac 版和 windows 版, 因为在实际生产环境中, 依然还是在 Linux 系统下使用 docker, 而且相同的镜像, 相同的参数, 在 Linux 环境执行没有问题, 而在 mac 上执行出问题的事情已经发生过很多次了. 建议不要给自己铺垫这些不必要的麻烦!


官方文档:

Docker CE For Mac 同样分为了两个版本, 一个是稳定版; 一个是开发版

下载链接:

双击安装文件: Docker.dmg 打开安全程序界面. 将左边的图标拖拽到右边的文件夹中.

在 launchpad 中找到 docker 图标, 单机启动

启动后会在 macOS 的导航栏中出现 docker 的图标

点击导航栏中的 docker 图标, 可以查看运行状态

提示: mac 版本和 windows 版本的 docker 仅限于体验. 甚至连测试环境都不推荐使用 mac 版和 windows 版, 因为在实际生产环境中, 依然还是在 Linux 系统下使用 docker, 而且相同的镜像, 相同的参数, 在 Linux 环境执行没有问题, 而在 mac 上执行出问题的事情已经发生过很多次了. 建议不要给自己铺垫这些不必要的麻烦!


官方文档:

安装 Docker

在 Docker1.13.1版本之后, 突然改变了 Docker 版本的命令方式, 以v年.月的方式命令, 并且首次明确区分了社区版CE和企业版EE

Docker 的版本

  • Docker Enterprise Edition (Docker EE) Docker EE 的明显优势不在于 Docker Engine 的本身, 而在于 Docker 周边的生态配件. Docker 官方为 EE 版本设计开发了一套目前集成度极高的 Docker 容器管理平台. 集Docker 企业版 Engine, Docker Registry UI, CICD, 监控等功能于一身(Docker Datacenter)
  • Docker Community Edition (Docker CE) Docker CE 就是我们之前一直在使用的开源版 Docker-engine. 也是我们将来主要使用的版本. Docker CE的版本发布规则如下:
    • Stable 稳定版. 每季度发行一版
    • Edge 开发版. 每月发行一版

平台支持一览表

平台 Docker EE Docker
Ubuntu
Debian
Red Hat Enterprise Linux
CentOS
Fedora
Oracle Linux
SUSE Linux Enterprise Server
Microsoft WinServer 2016
Microsoft Windows 10
macOS

查看官方帮助文档

截止到目前, 最新版本为 v17.03, 你可以通过latest标签🏷获取最新文档

为什么要使用 Docker

Docker 容器虚拟化带来的好处

传统的 LAMP 架构, 搭建起来费时费力, 需要调整很多依赖环境. 更可怕的是一旦需要做服务迁移, 一切都要重来.

Docker 提供了一种更为简单的方式, 通过容器来打包应用, 意味着迁移服务只需要在新的服务器上启动相应的容器即可. 大大减少迁移的时间和成本, 并大幅降低部署过程中可能会出现的问题和风险

Docker 在开发和运维中的优势

对于开发和运维来说, 最梦寐以求的就是一次性的创建或配置, 可以在任意环境, 任意时间让应用正常的运行. 而 Docker 就是实现这一目标的利器.

具体来说, Docker 在开发和运维中具有如下优势:

  • 更快的交付和部署
  • 更高效的资源利用
  • 更轻松的迁移扩展
  • 更简单的更新管理

Docker 与虚拟机的比较

  • Docker 启动和关闭容器的速度非常快, 可以在秒级实现, 相比传统的虚拟机速度要快很多
  • Docker 容器对系统资源需求很少, 一台主机上可以同时运行数千个 Docker 容器
  • Docker 通过类似 Git 的操作来方便用户获取/分发和更新应用镜像, 指令简明, 学习成本低
  • Docker 可以通过 Dockerfile 配置文件来支持灵活的自动化创建和部署机制, 提高工作效率

Docker 容器除了运行其中的应用之外, 基本上不消耗额外的系统资源, 保证应用性能的同时, 尽量减小系统开销. 传统的虚拟机运行 N 个不同的应用就要启动 N 个虚拟机, 每个虚拟机需要单独配置独占的内存,硬盘等资源, 而 Docker 只需要启动 N 个隔离的容器, 并将应用放到容器内即可

在隔离性方面, 传统的虚拟机方式多了一层额外的隔离. 但这并不意味这 Docker 不安全. Docker 利用 Linux 系统上的多种防护机制实现了严格可靠的隔离. 从1.3版本开始, Docker 引入了安全选项和镜像签名机制, 极大地提高了 Docker 的安全性.

特性 容器 虚拟机
启动速度 秒级 分钟级
硬盘使用 MB GB
性能 接近原生 5%以上的性能损耗
系统支持量 单机支持上千个容器 一般几十个容器
隔离性 安全隔离 完全隔离

Docker 在国际上虽然也可以称得上是新兴技术, 但是在国内, 丝毫没有看出 Docker 一个起步不到4年的年轻产品. 在国内, 众多大厂开始大量使用 Docker 基础. 其中 滴滴 京东 蘑菇街 知乎 豆瓣等大型互联网公司都在大规模的在线上环境落地 Docker 技术.

在2016年的双11之后, 京东更是首先爆出15万 Docker 服务器的规模. 可见 Docker 现在虽然还是一个快速迭代, 快速完善的系统, 但是已经得到了世界互联网大厂的任何. Docker 的早期线上落地的推广, 大都是由这些互联网大厂实施的. 给后续的中小企业也带来了极高的参考价值.

在5年前, 像 OpenStack 以及 CloudStack 这类云服务基础架构出现时, 在运维领域刮起了一阵飓风🌪 短短几年间, IDC 机房不再是所有互联网公司的标配, 为了减少运维成本, 更多的去关注业务的本身, 越来越多的创业公司选择使用公有云服务.

5年后的今天, IaaS 的公有云服务仍然是主流, 在 IaaS 之上又出现了 CaaS 服务, 即以 Container 为主导的基础服务架构. 将 IaaS 的资源利用到极致. Docker 不是 IaaS 的替代品, 但却是 IaaS 平台强有力的补充, 在为企业提高资源利用率, 减少成本, 提高自动化程度等方面提供了强有力的支持.

即使目前大多中小企业依然在自己的开发环境和测试环境观望 Docker 技术的发展, 但是不可否认的是 Docker 目前已经有能力胜任线上业务的重担. 通过网上大厂们流传出的”最佳实践”, 完全可以指到我们将服务容器化, 并很好的调试和排错.

Docker从2013年开源. 2015年是 Docker 开源项目突飞猛进的一年,这段时间Docker 官方先后发布了V1.5、V1.6、V1.7、V1.8、V1.9等5个大版本以及7个修订版本

2016年 Docker发展同样迅速,截止2016年12月7日Docker官方共发布了V1.10, V1.11, V1.12等3个大版本以及8个修订版本.

2017年1月18日, Docker 发布了最重大的一次版本更新 V1.13, 2月8日发布了V1.13.1, 在3月1日, Docker 公布了新的命名规则

V1.13.1版本之后, 所有的版本都会按照 VYY.MM 的格式进行打包. 比如 Docker 在2017年3月的这次更新, 新的版本号变成了 V17.03.0-ce

前面是日期不用解释, 后面的CE暴露了 Docker 公司渴望将该容器技术商业化的决心. 从此之后 Docker 的版本划分为商业版本的 EE和开源社区版本的 CE , 其中开源社区版本也分成了两类, 分别为 每季度更新的Stable稳定版和每月更新的Edge 开发版

  • Docker EE
  • Docker CE
    • Docker CE stable
    • Docker CE edge