一、直接安装mysql
参见文章CentOS 安装 mysql
下面介绍使用docker安装mysql
二、 docker
1、安装docker
- 安装前置的工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
- 添加软件源信息:
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
- 更新 yum 缓存:
sudo yum makecache fast
- 安装 Docker-ce:
sudo yum -y install docker-ce
- 启动 Docker 后台服务
sudo systemctl start docker
2、配置网络镜像加速
- 新建配置文件
vi /etc/docker/daemon.json
- 添加内容并保存
{
"registry-mirrors": ["http://hub-mirror.c.163.com"]
}
3、配置docker开机自启
systemctl enable docker.service
三、 安装 mysql
1、 拉取最新版镜像
docker pull mysql
2、新建目录,用作mysql的存储映射
mkdir /var/lib/mysql
3、 创建并启动容器
docker run \
--name mysql \
-p 3306:3306 \
--restart=always \
-e MYSQL_ROOT_PASSWORD=root \
-v /var/lib/mysql/data:/var/lib/mysql/ \
-d mysql \
--character-set-server=utf8mb4 \
--collation-server=utf8mb4_unicode_ci
参数说明:
- -p: 映射本地端口3306
- --restart-always: docker服务启动时,自动启动容器,并且当容器停止时,尝试重启容器
- -e MYSQL_ROOT_PASSWORD:设置root初始化密码为root,第一次设置才有小,后面重启以修改的密码为准
- -v : 将本地目录和docker虚拟机内的目录做映射
- -d: 后台运行容器,并返回容器ID
- mysql8.0安装默认编码为utf8mb4,所以可以不需要参数--character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
执行后可以看到返回了容器id
image.png
4、查看运行情况
-
docker ps
image.png - 复制文件
docker cp mysql:/var/lib/mysql ./
- 查看运行日志
docker logs --tail 50 --follow --timestamps mysql
image.png
- 进入容器
docker exec -it mysql /bin/bash
- 登录mysql
mysql -u root -p
- 查看 mysql 时区
select timediff(now(),convert_tz(now(),@@session.time_zone,'+00:00'));
或
SELECT TIMEDIFF(NOW(), UTC_TIMESTAMP);
或
show variables like '%time_zone%';
--查看系统当前时间
select now();
image.png
image.png
图示表示使用的是 UTC 时区,当前本机时间为 9 点,服务器中为 1点,差了八个小时
后续就是常规的 mysql 初始化操作,此处不赘述
- 例如,新增用户并启用远程连接
CREATE USER 'mysqluser'@'%' IDENTIFIED WITH mysql_native_password BY 'root';
GRANT ALL PRIVILEGES ON *.* TO 'mysqluser'@'%';
四、 配置一个简单的主从示例
1、按照上述方法配置一个新的虚拟机和mysql docker
2、主mysql设置
- 拷贝一份MySQL配置文件
docker cp mysql:/etc/mysql/my.cnf ./my.cnf
- 编辑文件内容
在 [mysqld] 节点最后加上后保存
log-bin=mysql-bin
server-id=1
server-id=1 唯一服务器ID,非0整数,不能和其他服务器的server-id重复
- 将修改后的文件覆盖docker中mysql中的配置文件
docker cp ./my.cnf mysql:/etc/mysql/my.cnf
- 重启 mysql 的docker , 让配置生效
docker restart mysql
- 创建备份用户
CREATE USER 'backup'@'%' IDENTIFIED WITH mysql_native_password BY 'backup';
grant replication slave on *.* to 'backup'@'%' ;
show grants for 'backup'@'%';
image.png
3、从mysql设置
- 按照上述方法,修改配置文件
内容如下
log-bin=mysql-bin
server-id=2
4、从库配置
运行SQL语句
CHANGE MASTER TO
MASTER_HOST='ip',
MASTER_PORT=3306,
MASTER_USER='backup',
MASTER_PASSWORD='backup';
START SLAVE;
可看到如下结果:
image.png
- 若报错
Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work
进入从库data目录,修改auto.cnf
vi /var/lib/mysql/data/auto.cnf
将其中的uuid
改为与主库不同即可
5、测试
主库中表新增记录,再去从库查询,会发现记录已经自动同步了过去
Ok!
网友评论