步骤1:拉取镜像
docker pull mariadb:latest
步骤2.1:创建两个文件夹用于放置挂载mysql的my.cnf
/tianzuomysqlconf/master
/tianzuomysqlconf/slave
mkdir /tianzuomysqlconf cd /tianzuomysqlconf mkdir master mkdir slave |
步骤2.2:创建一份my.cnf到步骤2中的文件夹。
#创建一个自定义的 my.cnf 文件:在本地主机上创建一个新的 my.cnf 文件,你可以使用任何文本编辑器进行编辑。确保按照 MariaDB 文档提供的配置选项进行修改 # 新的my.cnf文件内容可以为空。在MySQL中,my.cnf是配置文件,用于配置数据库服务器的各种参数和设置。如果你没有特定的需求或者不需要修改任何配置参数,那么新的my.cnf文件可以保持为空。在这种情况下,MySQL将使用默认的配置参数来启动和运行。但请注意,如果你需要自定义配置,确保将所需的配置项添加到my.cnf文件中,以便按照你的要求进行设置。 cd /tianzuomysqlconf/master touch my.cnf cp my.cnf /tianzuomysqlconf/slave |
步骤3:创建两个mysql容器,并使用/etc/mysql/conf.d/ 目录挂载my.cnf文件。
#分号可一起执行。 docker run -p 3309:3306 --name tianzuo_mysql_test_master -d -e MARIADB_ROOT_PASSWORD=STZ1024 -v /tianzuomysqlconf/master/my.cnf:/etc/mysql/conf.d/my.cnf mariadb;docker run -p 3310:3306 --name tianzuo_mysql_test_slave -d -e MARIADB_ROOT_PASSWORD=STZ1024 -v /tianzuomysqlconf/slave/my.cnf:/etc/mysql/conf.d/my.cnf mariadb |
步骤3-error:如果过程中有操作失误,想要删除容器。
docker rm -f tianzuo_mysql_test_master;docker rm -f tianzuo_mysql_test_slave |
步骤4:开始配置MySQL主从复制(binlog混合模式)
步骤4-1:配置主数据库(Master):
打开主数据库的配置文件my.cnf(/tianzuomysqlconf/master/my.cnf)。 vi /tianzuomysqlconf/master/my.cnf 按下键盘字母:i键 添加以下配置项: [mysqld] server-id = 1 log_bin = mysql-bin binlog_format = MIXED esc :wq 保存并关闭配置文件。 重启主数据库。 docker restart tianzuo_mysql_test_master |
步骤4-2:配置从数据库(Slave):
打开从数据库的配置文件my.cnf(/tianzuomysqlconf/slave/my.cnf)。 vi /tianzuomysqlconf/slave/my.cnf 按下键盘字母:i键 添加以下配置项: [mysqld] server-id = 2 relay_log = relay-log log_slave_updates = 1 保存并关闭配置文件。 重启从数据库。 docker restart tianzuo_mysql_test_slave |
步骤4-3:在主数据库中创建用于复制的账户
登录主数据库的命令行或图形化界面。 docker exec -it tianzuo_mysql_test_master bash mysql -h localhost -P 3306 -u root -p"STZ1024" 执行以下SQL语句: CREATE USER 'replication'@'%' IDENTIFIED BY 'STZ1024';GRANT REPLICATION SLAVE ON *.* TO 'replication'@'%'; FLUSH PRIVILEGES; |
步骤4-4:获取主数据库的二进制日志位置
在主数据库的命令行或图形化界面执行以下SQL语句: SHOW MASTER STATUS; 记下输出结果中的File和Position字段的值,将其用于后续步骤。 |
步骤4-5:配置从数据库的复制信息
登录从数据库的命令行或图形化界面。 docker exec -it tianzuo_mysql_test_slave bash mysql -h localhost -P 3306 -u root -p"STZ1024" 执行以下SQL语句,将主数据库的信息配置到从数据库: CHANGE MASTER TO MASTER_HOST = '172.17.0.1', MASTER_PORT = 3309, MASTER_USER = 'replication', MASTER_PASSWORD = 'STZ1024', MASTER_LOG_FILE = 'mysql-bin.000001', MASTER_LOG_POS = 771; 备注:172.17.0.1是宿主机的ip,各位看官自行替换。 |
步骤4-6:启动从数据库的复制进程:
在从库中执行以下SQL语句: START SLAVE; |
步骤4-7:检查主从复制状态
在从数据库的命令行或图形化界面执行以下SQL语句: SHOW SLAVE STATUS\G; 检查输出结果中的Slave_IO_Running和Slave_SQL_Running字段是否都为"YES",表示主从复制已经成功建立。 Slave_IO_Running反映了复制进程中I/O线程的状态。当其值为"YES"时,表示I/O线程正在正常运行,能够从主数据库接收复制日志文件(binlog)。 Slave_SQL_Running反映了复制进程中SQL线程的状态。当其值为"YES"时,表示SQL线程正在正常运行,能够将接收到的复制日志应用到备份数据库。 |
步骤4-error:如果需要重新配置从数据的复制信息,先停止从数据库的复制进程:
在从库中执行以下SQL语句: STOP SLAVE; 再进行授权 CHANGE MASTER TO MASTER_HOST = '172.17.0.1', MASTER_PORT = 3309, MASTER_USER = 'replication', MASTER_PASSWORD = 'STZ1024', MASTER_LOG_FILE = 'mysql-bin.000001', MASTER_LOG_POS = 771; 再回到步骤4-6 START SLAVE; |
步骤5-验证:
步骤5-1 利用navicat建立两个连接;
步骤5-2 尝试在主库中创建一个库,看看从库会不会自动生成。
重新建立3310连接后,从库同步成功。速度贼快。至此验证成功。