docker安装mysql,开启主从

  • docker pull mysql:5.7

  • 创建目录/mydata/mysql/log /mydata/mysql/conf /mydata/mysql/data
  •  docker run -itd --name mysql-back -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -v /mydata/mysql/log:/var/log/mysql -v /mydata/mysql/data:/var/lib/mysql -v /mydata/mysql/conf:/etc/mysql  mysql:5.7
  • docker exec -it '容器ID' bash 进入容器

主数据库

#my.cnf配置编码和忽略大小写
character_set_server=utf8
init_connect='SET NAMES utf8'
# Disabling symbolic-links is recommended to prevent assorted security risks
#symbolic-links=0
lower_case_table_names=1

 

my.cnf添加

server-id=1 # 服务器唯一id 保证唯一,不能重复(一般为ip最后一段)
log-bin=mysql-bin # 启用二进制日志,MySOL的bin-log的名字
binlog-do-db=mydb # 指定需要同步的数据库

 

重启mysql

service mysqld restart

在MySQL主上创建用于备份账号

CREATE USER 'resp'@'%' IDENTIFIED BY 'repl123456';

GRANT REPLICATION SLAVE ON *.* TO 'resp'@'%';

 

MySQL主上,查看bin-log的文件名和位置并记录(resp_mysql.000001 |      605 )

SHOW MASTER STATUS;

编辑MySQL从数据库上的my.cnf

注:docker映射目录创建mysql默认没有配置文件,需要自己创建,目录 /mydata/mysql/conf。也可以先临时创建一个mysql容器,把配置文件cp出来,删除容器后再重新创建挂载。

vi /mydata/mysql/conf/my.cnf
character_set_server=utf8
init_connect='SET NAMES utf8'
lower_case_table_names=1
server-id=2

执行SQL
change master to master_host='ip',master_user='resp',master_password='repl123456',master_port=13306,master_log_file='resp_mysql.000001',master_log_pos=286944;

 

master host:MySQL主的地址
master_user:备份的用户名
master_password:备份的用户密码
master_log_file:bin-log的文件名
master_log_pos:bin-log的位置

 

MySOL从上开启同步(如果主数据库之前已有数据,先备份还原到从数据库)

START SLAVE;

 查看状态

show slave status

主服务器防火墙端口需要开放从数据库的IP地址,从服务器无需开启。

#修改mysql密码
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456'; 

#给所有权限
GRANT ALL PRIVILEGES ON *.* TO root@"%" IDENTIFIED BY "123456"; 

 

posted @ 2022-05-26 06:39  低学历程序员  阅读(51)  评论(0编辑  收藏  举报