赞
踩
Ubuntu自带的软件源列表更新很慢,所以我们切换成阿里提供的软件源列表。
# 备份自带的软件源列表 cp /etc/apt/sources.list /etc/apt/sources.list.back # 删除自带的软件源列表文件 rm -rf /etc/apt/sources.list # 新建软件源列表文件 vim /etc/apt/sources.list # 将下面阿里提供的软件源列表内容复制到sources.list文件中 # deb cdrom:[Ubuntu 16.04 LTS _Xenial Xerus_ - Release amd64 (20160420.1)]/ xenial main restricted deb-src http://archive.ubuntu.com/ubuntu xenial main restricted #Added by software-properties deb http://mirrors.aliyun.com/ubuntu/ xenial main restricted deb-src http://mirrors.aliyun.com/ubuntu/ xenial main restricted multiverse universe #Added by software-properties deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted multiverse universe #Added by software-properties deb http://mirrors.aliyun.com/ubuntu/ xenial universe deb http://mirrors.aliyun.com/ubuntu/ xenial-updates universe deb http://mirrors.aliyun.com/ubuntu/ xenial multiverse deb http://mirrors.aliyun.com/ubuntu/ xenial-updates multiverse deb http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse #Added by software-properties deb http://archive.canonical.com/ubuntu xenial partner deb-src http://archive.canonical.com/ubuntu xenial partner deb http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted deb-src http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted multiverse universe #Added by software-properties deb http://mirrors.aliyun.com/ubuntu/ xenial-security universe deb http://mirrors.aliyun.com/ubuntu/ xenial-security multiverse
下面正式安装Docker。
首先更新软件列表:apt-get update
安装Docker:apt-get install docker.io -y
查看Docker版本:docker version
如下图表示没有启动Docker服务。
启动Docker服务:service docker start
如下图表示Docker服务已启动。
查看容器状态:service docker status
查看正在运行的容器
# 查看正在运行的容器
docker ps
# 查看所有的容器,包括已经停止的。
docker ps -a
查看所有镜像
docker images
拉取镜像
docker pull <镜像名:tag>
# 例如以下代码
docker pull mysql
停止、启动、杀死指定容器
docker start <容器名 or ID>
docker stop <容器名 or ID>
docker kill <容器名 or ID>
删除容器
docker rm -f <容器名 or ID>
# 删除所有容器
docker rm -f $(docker ps -a -q)
查看容器日志
docker logs -f <容器名 or ID>
进入容器
docker exec -it <容器名 or ID> bash
docker部署mysql并修改配置: https://blog.csdn.net/Madness_stone/article/details/124513179
拉取官方镜像
[mysqld]
lower_case_table_names=1
default-time-zone = Asia/Shanghai
docker cp /home/mysql.conf.d/mysqld.cnf mysql3381:/etc/mysql/mysql.conf.d/mysqld.cnf
# 拉取 mysql 5.7
docker pull mysql:5.7
# 拉取最新版mysql镜像
docker pull mysql
创建一个Mysql容器
sudo docker run -p 3380:3306 --name mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
或者
docker run -p 3306:3306 --name mysql \
-v /mydata/mysql/log:/var/log/mysql \
-v /mydata/mysql/data:/var/lib/mysql \
-v /mydata/mysql/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql:5.7
进入到容器:docker exec -it mysql3380 bash
进入Mysql客户端: mysql -h127.0.0.1 -uroot -p123456 -P3306
注意:在容器中进入Mysql客户端用的是容器内部端口,主机是127.0.0.1;如果外部连接Mysql客户端,需要使用创建容器时指定主机端口的端口号,主机名是主机的IP地址。
# 拉取镜像 docker pull mysql:8.0.20 # 创建挂载使用到的目录 mkdir -vp /home/docker/mysql3380 cd /home/docker/mysql3380 mkdir data logs conf # 创建mysql容器 docker run -d -p 3380:3306 --name mysql3380 -e MYSQL_ROOT_PASSWORD=123456 mysql:8.0.20 # 拷贝mysql的配置文件和数据 # 复制配置文件 docker cp mysql3380:/etc/mysql /home/docker/mysql3380/conf # 复制data文件 docker cp mysql3380:/var/lib/mysql /home/docker/mysql3380/data # 停止并删除容器 docker stop mysql3380 docker rm -f mysql3380 # 重新创建容器(指定数据卷) docker run -d -p 3380:3306 \ --name mysql3380 \ --privileged=true \ --restart=unless-stopped \ -v /home/docker/mysql3380/conf/mysql/conf.d:/etc/mysql/conf.d \ -v /home/docker/mysql3380/logs:/var/log/mysql \ -v /home/docker/mysql3380/data/mysql:/var/lib/mysql \ -e MYSQL_ROOT_PASSWORD=123456 \ mysql:8.0.20 # 不允许远程连接解决方法 docker exec -it mysql /bin/bash mysql -u root -p use mysql # 更新root - localhost 为 root - % update user set host = '%' where user = 'root' and host='localhost'; # 设置允许远程用户访问 GRANT ALL ON *.* TO 'root'@'%'; flush privileges;# 刷新权限 #更新用户加密方式,mysql8默认的加密方式 ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '密码';
上面我们已经创建了一个Mysql服务,这里作为主从中的master服务。
下面用同样的方式创建一个Mysql的slave服务。
# 注意修改主机端口号和容器名
sudo docker run -p 3381:3306 --name mysql3381 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
配置主从之前我们需要知道服务器的IP地址。
docker inspect --format='{{.NetworkSettings.IPAddress}}' mysql3380
docker inspect --format='{{.NetworkSettings.IPAddress}}' mysql3381
Master 服务器地址是 172.17.0.4
,Slave 服务器地址是 172.17.0.5
,MySQL 的端口号都为 3306。
进入到 Master 服务器:docker exec -it mysql3380 bash
进入Mysql客户端: mysql -h127.0.0.1 -uroot -p123456 -P3306
修改配置文件: /etc/mysql/my.cnf
[mysqld] ## 设置server_id,一般设置为IP,同一局域网内注意要唯一 server_id=100 ## 复制过滤:也就是指定哪个数据库不用同步(mysql库一般不同步) binlog-ignore-db=mysql ## 开启二进制日志功能,可以随便取,最好有含义(关键就是这里了) log-bin=edu-mysql-bin ## 为每个session 分配的内存,在事务过程中用来存储二进制日志的缓存 binlog_cache_size=1M ## 主从复制的格式(mixed,statement,row,默认格式是statement) binlog_format=mixed ## 二进制日志自动删除/过期的天数。默认值为0,表示不自动删除。 expire_logs_days=7 ## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。 ## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致 slave_skip_errors=1062
一般docker容器中没有vi或者其它相应的文本编辑器,如果只是为了修改这个配置文件就安装一个vi,太麻烦了,下面是另一种方案。
通过docker cp把这个文件拷贝出来: docker cp mysql3380:/etc/mysql/my.cnf /home/
再拷贝回去:docker cp /home/my.cnf mysql3380:/etc/mysql/
在容器中重启Mysql服务: service mysql restart
这个命令会使得容器停止,重新启动容器就可以了。
创建数据同步用户:
CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
进入到 Master 服务器:docker exec -it mysql3381 bash
进入Mysql客户端: mysql -h127.0.0.1 -uroot -p123456 -P3306
[mysqld] ## 设置server_id,一般设置为IP,注意要唯一 server_id=101 ## 复制过滤:也就是指定哪个数据库不用同步(mysql库一般不同步) binlog-ignore-db=mysql ## 开启二进制日志功能,以备Slave作为其它Slave的Master时使用 log-bin=edu-mysql-slave1-bin ## 为每个session 分配的内存,在事务过程中用来存储二进制日志的缓存 binlog_cache_size=1M ## 主从复制的格式(mixed,statement,row,默认格式是statement) binlog_format=mixed ## 二进制日志自动删除/过期的天数。默认值为0,表示不自动删除。 expire_logs_days=7 ## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。 ## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致 slave_skip_errors=1062 ## relay_log配置中继日志 relay_log=edu-mysql-relay-bin ## log_slave_updates表示slave将复制事件写进自己的二进制日志 log_slave_updates=1 ## 防止改变数据(除了特殊的线程) read_only=1
配置完成后重启mysql,和配置 Master 一样,会使容器停止,需要启动容器。
在 Master 进入 MySQL, 然后执行命令: show master status;
记录下 File 和 Position 字段的值,后面会用到。
然后到 Slave 中进入 mysql,执行命令:
change master to master_host='172.17.0.4',
master_user='slave',
master_password='123456',
master_port=3306,
master_log_file='edu-mysql-bin.000001',
master_log_pos=2395,
master_connect_retry=30;
执行以下命令,开始开启主从同步: start slave;
在 Slave 的 MySQL 终端执行查看主从同步状态: show slave status \G;
SlaveIORunning 和 SlaveSQLRunning 是No,表明 Slave 还没有开始复制过程。相反 SlaveIORunning 和 SlaveSQLRunning 是Yes表明已经开始工作了,因为我已经运行过了,所以我的显示的都是 Yes。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。