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";