MySQL主从 1061 报错, 键冲突, 产生的原因一般为用户在主库上建立索引导致, 可以通过在从库手动删除冲突的索引解决
1 | # 先暂停主从同步 |
MySQL主从 1061 报错, 键冲突, 产生的原因一般为用户在主库上建立索引导致, 可以通过在从库手动删除冲突的索引解决
1 | # 先暂停主从同步 |
grant 权限 on 数据库.数据表 to '用户'@'主机';
权限 | 说明 |
---|---|
usage | 连接(登录)MySQL 的权限, 每建立一个用户, 就会自动授予usage 权限. 该权限只能用于数据库登录, 不能执行任何操作, 且 usage 权限不能被回收♻️ |
file | 拥有 file 权限才可以执行 select ... into outfile 和 load 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 processlist 和kill 命令. 默认情况下, 每个用户都可以执行该命令, 但是只能查看本用户的进程 |
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 版本, 所以本篇不做详细介绍
老版本的 Docker 被叫做 docker
或 docker-engine
如果系统当前有这些版本的系统, 那么你需要先卸载他们
1 | $ sudo yum remove docker \ |
需要 yum
命令的回显显示没有相关的软件包被安装
在 /var/lib/docker
目录下, 包含了镜像
, 容器
, 数据卷
和 网络配置
/etc/yum.repos.d/
下清除所有跟 docker 相关的软件仓库配置/etc/yum/vars/
下创建两个变量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-utils
以得到 yum-config-manager
命令1 | $ sudo yum install -y yum-utils |
1 | $ sudo yum-config-manager \ |
1 | $ sudo yum makecache fast |
1 | $ sudo yum -y install docker-ee |
1 | $ sudo systemctl start docker |
1 | $ sudo docker run hello-world |
参考官方文档:
Ubuntu 是 docker 第一个支持的系统发行版, 截止到目前, 我们也依然推荐在生产环境中使用 Ubuntu 系统. 虽然我也很喜欢 CentOS, 但是在 docker 这件事儿中, Ubuntu 确实是最合适的系统选择
老版本的 Docker 被叫做 docker
或 docker-engine
如果系统当前有这些版本的系统, 那么你需要先卸载他们
1 | $ sudo apt-get remove docker docker-engine |
需要 apt-get
命令的回显显示没有相关的软件包被安装
在 /var/lib/docker
目录下, 包含了镜像
, 容器
, 数据卷
和 网络配置
在官方文档中, 强烈推荐 Ubuntu14.04版本如果使用aufs
存储引擎, 那么一定要安装以下软件包
1 | $ sudo apt-get update |
apt
命令可以通过 https 协议使用软件源(repository)1 | $ sudo apt-get install \ |
1 | $ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - |
stable
版本的软件源1 | $ sudo add-apt-repository \ |
1 | $ sudo apt-get update |
1 | $ sudo apt-get install docker-ce |
1 | $ sudo apt-get install docker-ce=<VERSION> |
docker-ce 在安装好后自动启动
1 | $ sudo systemctl start docker |
1 | $ sudo docker run hello-world |
在生产环境中, 不是每个人登录都是使用 root 用户, 可能需要给普通用户操作 docker 的权限, 那么将该用户添加到 docker 组是简单方便的方式
1 | $ sudo usermod -aG docker your-user |
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.
1 | $ sudo docker run hello-world |
1 | $ sudo apt-get purge docker-ce |
1 | $ sudo rm -rf /var/lib/docker |
Docker CE For Windows 同样分为了两个版本, 一个是稳定版; 一个是开发版
下载链接:
系统要求:
双击安装文件: 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 上执行出问题的事情已经发生过很多次了. 建议不要给自己铺垫这些不必要的麻烦!
官方文档:
在 Docker1.13.1版本之后, 突然改变了 Docker 版本的命令方式, 以v年.月
的方式命令, 并且首次明确区分了社区版CE
和企业版EE
平台 | 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 run -ti -p 4000:4000 docs/docker.github.io:latest
docker run -ti -p 4000:4000 docs/docker.github.io:v1.13
docker run -ti -p 4000:4000 docs/docker.github.io:v1.12
docker run -ti -p 4000:4000 docs/docker.github.io:v1.11
docker run -ti -p 4000:4000 docs/docker.github.io:v1.10
docker run -ti -p 4000:4000 docs/docker.github.io:v1.9
docker run -ti -p 4000:4000 docs/docker.github.io:v1.8
docker run -ti -p 4000:4000 docs/docker.github.io:v1.7
docker run -ti -p 4000:4000 docs/docker.github.io:v1.6
docker run -ti -p 4000:4000 docs/docker.github.io:v1.5
docker run -ti -p 4000:4000 docs/docker.github.io:v1.4
传统的 LAMP 架构, 搭建起来费时费力, 需要调整很多依赖环境. 更可怕的是一旦需要做服务迁移, 一切都要重来.
Docker 提供了一种更为简单的方式, 通过容器来打包应用, 意味着迁移服务只需要在新的服务器上启动相应的容器即可. 大大减少迁移的时间和成本, 并大幅降低部署过程中可能会出现的问题和风险
对于开发和运维来说, 最梦寐以求的就是一次性的创建或配置, 可以在任意环境, 任意时间让应用正常的运行. 而 Docker 就是实现这一目标的利器.
具体来说, Docker 在开发和运维中具有如下优势:
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
开发版