本文档记录了mysql安装过程,主从配置过程,主备实现方式。
#mkdir /root/mysql/data
#mkdir /root/mysql/conf.d
#mkdir /root/mysql/conf
docker run -d -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=123456 mysql
# docker cp 4e71be6b176c:/var/lib/mysql /root/mysql/data
# docker cp 4e71be6b176c:/etc/mysql/my.cnf /root/mysql/conf/my.cnf
# docker cp 4e71be6b176c:/etc/mysql/conf.d /root/mysql/conf.d
#================配置文件复制,数据挂载======================== # 开启一个未挂载的容器 docker run -d -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=123456 mysql # 将容器内的数据以及配置文件拷贝出来 # docker exec -it mysql /bin/bash # docker cp 4e71be6b176c:/var/lib/mysql /root/mysql/data # docker cp 4e71be6b176c:/etc/mysql/my.cnf /root/mysql/conf/my.cnf # docker cp 4e71be6b176c:/etc/mysql/conf.d /root/mysql/conf.d
#================配置文件复制,数据挂载======================== # 开启一个未挂载的容器 docker run -d -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=123456 mysql # 将容器内的数据以及配置文件拷贝出来 # docker exec -it mysql /bin/bash # docker cp 4e71be6b176c:/var/lib/mysql /root/mysql/data # docker cp 4e71be6b176c:/etc/mysql/my.cnf /root/mysql/conf/my.cnf # docker cp 4e71be6b176c:/etc/mysql/conf.d /root/mysql/conf.d docker stop mysql \ docker rm mysql \ docker run -d \ --restart=always \ --privileged=true \ -v /root/mysql/data/:/var/lib/mysql \ -v /root/mysql/conf.d:/etc/mysql/conf.d \ -v /root/mysql/conf/my.cnf:/etc/mysql/my.cnf \ -v /root/mysql/log:/var/log/mysql \ -p 3306:3306 \ --name mysql \ -e MYSQL_ROOT_PASSWORD=123456 \ mysql
mysql>alter user 'root'@'%' identified by '123456' password expire never;
mysql>alter user 'root'@'%' identified with mysql_native_password by '123456';
mysql>flush privileges;
mysql>CREATE USER 'slaves'@ '%' IDENTIFIED BY '123456';
mysql>GRANT REPLICATION SLAVE ON *.* to 'slave'@'%';
mysql>flush privileges;
查看账户权限
mysql>show grants for root;
mysql>show grants for slaves;
[mysqld] pid-file = /var/run/mysqld/mysqld.pid socket = /var/run/mysqld/mysqld.sock datadir = /var/lib/mysql secure-file-priv= NULL server-id=201 #设置主服务器的ID,可以任意配置但是多个主从之间不能重复 innodb_flush_log_at_trx_commit=2 # 写入磁盘策略 sync_binlog=1 #开启binlog日志同步功能 expire_logs_days=180 #二进制日志保留天数 log-bin=mysql-bin-1 #binlog日志文件名(可以任意命名) #binlog-do-db=test # 这个表示只同步某个库 (如果没有此项,表示同步所有的库) #binlog-ignore-db=xxxx # 二进制日志中忽略数据库 # Disabling symbolic-links is recommended to prevent assorted security risks symbolic-links=0 # Custom config should go here !includedir /etc/mysql/conf.d/
[mysqld] pid-file = /var/run/mysqld/mysqld.pid socket = /var/run/mysqld/mysqld.sock datadir = /var/lib/mysql secure-file-priv= NULL read-only=1 #是否只读,0 代表非只读 1:代表只读 server-id=202 #设置主服务器的ID,可以任意配置但是多个主从之间不能重复 innodb_flush_log_at_trx_commit=2 # sync_binlog=1 #开启binlog日志同步功能 expire_logs_days=180, # 二进制日志保留天数 log-bin=mysql-bin-1 #binlog日志文件名(可以任意命名) # binlog-do-db=test # 这个表示只同步某个库 (如果没有此项,表示同步所有的库) #binlog-ignore-db=xxxx # 还有一个参数是指定不同步哪些库,这里不再赘述 # Disabling symbolic-links is recommended to prevent assorted security risks symbolic-links=0 # Custom config should go here !includedir /etc/mysql/conf.d/
进入master 数据库容器,查看主数据库状态,可以获得数据库的binlog日志文件名称和位置,用于配置从数据库开始同步的文件和位置
mysql>show master status
进入slave数据库容器
change master to master_host='192.168.43.201',master_user=' slaves ',master_password='123456!',get_master_public_key=1,master_log_file='mysql-bin-1.000002 ',master_log_pos= 650,master_port=3306;
参数说明
master_host:主数据库IP地址
master_user:主数据库连接用户名
master_password:主数据量连接密码
master_port:主数据端口
master_log_file:开始同步的主数据库日志名称,主数据库执行show master status 可获得当前binlog文件名称和位置
master_log_pos:开始同步的主数据库日志开始位置,主数据库执行show master status 可获得当前binlog文件名称和位置
get_master_public_key=1,mysql8默认使用插件caching_sha2_password连接需要拿到server的public key来加密password
开启或关闭主从同步
mysql>start slave;
查看主从同步
mysql>show slave status\G;
只有slave都为yes时配置才成功
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
navicat 连接master数据库