docker部署mysql服务

##########创建单机数据库服务myql

下载镜像:docker pull mysql:5.7

 启动mysql  容器名称,数据目录,日志目录,配置文件目录,密码,镜像版本

docker run -d -p 3306:3306 --name mysql-server -v /opt/mysql/data:/var/lib/mysql \
 -v /opt/mysql/log:/var/log/mysql \
 -v /opt/mysql/conf:/etc/mysql \
 -e MYSQL_ROOT_PASSWORD=root \
> mysql:5.7
###检查失败原因docker logs a22
 

 

解决:

##直接容器登陆  

docker exec -it mysql-server2 mysql -uroot -proot

 ###另外一种方式登陆

安装mariadb 让宿主机有mysql命令

# mysql -h192.168.3.201 -uroot -proot -P3306

 docker exec -it mysql-server2 mysql -uroot -proot

 

 

 ################################mysql主从复制##############

 主节点部署mysql

docker  run -d -p 3307:3306 \

--name mysql-master \

-v /opt/mysql-master/log:/var/log/mysql \

-v /opt/msyql-master/data:/var/lib/mysql \

-v /opt/mysql-master/conf:/etc/mysql/conf.d \

-e MYSQL_ROOT_PASSWORD=root \

mysql:5.7

 用以下的命令

docker run -d -p 3307:3306 \
 --name mysql-master \
 -v /opt/mysql-master/log:/var/log/mysql \
 -v /opt/msyql-master/data:/var/lib/mysql \
-v /opt/mysql-master/conf:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=root \
 mysql:5.7

 

 

登陆测试:

 ####主节点配置文件编辑

[root@docker-ui ~]# cat /opt/mysql-master/conf/my.cnf

[client]
default-character-set=utf8


[mysql]
default-character-set=utf8


[mysqld]
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
skip-name-resolve

server_id=1
log-bin=mysql-bin
read-only=0
binlog-do-db=kubemsb_test

replicate-ignore-db=mysql
replicate-ignore-db=sys
replicate-ignore-db=information_schema
replicate-ignore-db=performance_schema

 #####从节点配置############

 

docker run -d -p 3308:3306 \
 --name mysql-slave \
 -v /opt/mysql-slave/log:/var/log/mysql \
 -v /opt/msyql-slave/data:/var/lib/mysql \
-v /opt/mysql-slave/conf:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=root \
--link mysql-master:mysql-master  \
 mysql:5.7

 ###########--link详解

同一个宿主机上的多个docker容器之间如果想进行通信有三种方式:

  1. 通过使用容器的ip地址来通信【这样会导致ip地址的硬编码,不方便迁移,并且容器重启后ip地址会改变,除非使用固定的ip】
  2. 通过宿主机的ip加上容器暴露出的端口号来通信【这样的通信方式比较单一,只能依靠监听在暴露出的端口的进程来进行有限的通信】
  3. 通过docker的link机制可以通过一个name来和另一个容器通信,link机制方便了容器去发现其它的容器并且可以安全的传递一些连接信息给其它的容器。

测试登陆

 

 

 从节点配置文件如下:/opt/mysql-slave/conf/my.cnf

[client]
default-character-set=utf8



[mysql]
default-character-set=utf8



[mysqld]
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
skip-name-resolve

 

server_id=2
log-bin=mysql-bin
read-only=1
binlog-do-db=kubemsb_test

 

replicate-ignore-db=mysql
replicate-ignore-db=sys
replicate-ignore-db=information_schema
replicate-ignore-db=performance_schema
 
 ########主从复制############
 
 第一步:主节点做授权
##添加授权用户
MySQL [(none)]> grant replication slave on *.* to 'backup'@'%' identified by '123456';
Query OK, 0 rows affected, 1 warning (0.00 sec)
##刷新授权表
MySQL [(none)]> flush privileges;
Query OK, 0 rows affected (0.00 sec)

 

 解决,更改replication改为replicate

 

##查主节点状态: show master status\G

 

docker restart mysql-slave重启容器,使得从节点的配置文件生效

然后连接主节点

change master to master_host='mysql-master', master_user='backup', master_password='123456', master_log_file='mysql-bin.000001', master_log_pos=154, master_port=3306;

启用从节点

MySQL [(none)]> start slave;

Query OK, 0 rows affected (0.00 sec)

 

测试:主节点创建kubemsb_test库,从节点自动获取

 ##在从节点上面查数据

 从节点数据同步过来了

 

 

 

 

 

 

 

 
 
 
 

 

 

 

 

 

 

 

 

 

 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 

posted @ 2023-12-30 21:42  往事已成昨天  阅读(209)  评论(0编辑  收藏  举报