docker run -p 3306:3306 --name mysql -v /home/mysql/config:/etc/mysql -v /home/mysql/logs:/logs -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d -it --privileged=true mysql:8.0.18
/etc/mysql:mysql默认配置文件路径 /var/lib/mysql:数据存储位置 MYSQL_ROOT_PASSWORD=123456 设置root用户密码 --privileged=true 权限提升 真root权限
修改配置文件
首先 my.cnf,在[mysqld]下增加一行:skip-grant-tables; 重启mysql:docker restart mysql 进入mysql容器:docker exec -it mysql /bin/bash
登录mysql修改密码开放远程连接权限
mysql -uroot -p #提示输入密码,直接回车即可跳过验证 FLUSH PRIVILEGES;#不执行这步会报错 set password for root@localhost = '新密码'; ALTER USER 'root'@'%' IDENTIFIED BY '新密码' PASSWORD EXPIRE NEVER; #修改加密规则 , ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '新密码' ; #更新一下用户的密码 grant all privileges on *.* to 'root'@'%' with grant option; #开放远程访问 FLUSH PRIVILEGES; quit;
再次修改配置
首先 my.cnf,注释skip-grant-tables; 重启mysql:docker restart mysql 进入mysql容器:docker exec -it mysql /bin/bash mysql -uroot -p #提示需要密码验证,此时就不可以跳过了
修改主节点配置
mysql的配置文件都保存在 /etc/mysql下(容器内),映射到宿主机目录是 /home/mysql/config cd /home/mysql/config vim my.conf #添加以下内容到[mysqld] ###要给从机同步的库(如果不写,默认全部同步) ##binlog-do-db=db01 ###不给从机同步的库(多个写多行) ##binlog-ignore-db=mysql ##binlog-ignore-db=information_schema ##binlog-ignore-db=performance_schema ##binlog-ignore-db=performance_schema ##binlog-ignore-db=sys ###自动清理 7 天前的log文件,可根据需要修改 expire_logs_days=7 #### 开启二进制日志功能,可以随便取(关键) log-bin=master-bin ### 唯一标识 server-id=888
重启主节点mysql
docker restart mysql
修改从节点配置
vim /home/mysql/config/my.conf #添加以下内容到[mysqld] ,容器内对应路径/etc/mysql/my.conf ##要给从机同步的库(如果不写,默认全部同步) #binlog-do-db=db01 ##不给从机同步的库(多个写多行) #binlog-ignore-db=mysql #binlog-ignore-db=information_schema #binlog-ignore-db=performance_schema #binlog-ignore-db=performance_schema #binlog-ignore-db=sys ##自动清理 7 天前的log文件,可根据需要修改 expire_logs_days=7 ### 开启二进制日志功能,可以随便取(关键) log-bin=slave-bin ## 唯一标识 server-id=666
重启从节点mysql
查看主节点状态
--通过该命令可以查看master数据库当前正在使用的二进制日志及当前执行二进制日志位置 show master status
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9XdrFe6J-1640182676684)(https://cdn.jsdelivr.net/gh/chenguod/picture/202112212033243.png)]
进入从节点开始同步
change master to master_host='10.0.8.17', master_user='root', master_password='123456', MASTER_LOG_FILE='master-bin.000001', MASTER_LOG_POS=7475567 ; start slave; ##slave:从节点 master:主节点 stop slave 停止slave。reset slave重启slave。 reset master重启master master_host :主节点的地址,指的是容器的独立ip master_port :主节点的端口号,指的是容器的端口号(默认3306) master_user :用于数据同步的用户 master_password :用于同步的用户的密码 master_log_file :指定从节点从哪个日志文件开始复制数据,即上文中提到的 File 字段的值 master_log_pos :从哪个 Position 开始读,即上文中提到的 Position 字段的值
查看状态
show slave status; 如下所示即为成功,现在在主节点新建表或者增加数据,在从节点即可看到。