1.复制的基本原理
slave会从master读取binlog来进行数据同步
master将改变记录到二进制日志(binary log)。这些记录过程叫做二进制日志文件,binary log events;
slave将master的binary log events拷贝到它的中继日志(relay log)
slave重做中继日志中的事件,将改变应用到自己的数据库中。mysql主从复制是异步且串行化的
2.复制的基本原则
每个slave只有一个master
每个slave只能有一个唯一的服务器ID
每个master可以有多个salve
3.复制的最大问题
延时
4.一主一从常见配置
mysql版本一致且后台以服务运行
主从配置都在[mysqld]结点下,都是小写
主机修改my.ini配置文件
需要在docker内安装vim
root@7246f4d3f11d:/etc/mysql# apt-get install vim Reading package lists... Done Building dependency tree Reading state information... Done E: Unable to locate package vim
执行apt-get update进行更新
再次执行apt-get install vim
进入mysql容器
docker exec -it 容器id /bin/bash
数据库配置文件在/etc/mysql/my.cnf
数据库文件在/var/lib/mysql
[必须]主服务器唯一ID
server-id=1 #同一局域网内注意要唯一
[必须]启用二进制日志
log-bin=自己本地的路径/mysqlbin
## 开启二进制日志功能,可以随便取(关键)
[可选]启用错误日志
log-err=自己本地的路径/mysqlerr
[可选]根目录
basedir="自己本地路径"
basedir="" #这里带引号
[可选]临时目录
tmpdir="自己本地路径"
[可选]数据目录
datadir="自己本地路径/data/"
read-only=0
主机读写都可以
[可选]设置不要复制的数据库
binlog-ignore-db=mysql
[可选]设置需要复制的数据库
binlog-do-db=需要复制的主数据库名字
从机修改my.cnf配置文件
[必选]从机唯一ID
server-id = 200
[可选]启用二进制日志
修改过配置文件,主机从机均需重启mysql服务
docker restart 容器id
主机建立账户并授权slave
建立账户
create user 'root200'@'192.168.1.200' identified by 'hzzq88801548d200';
赋权
grant REPLICATION SLAVE ON *.* to 'root200'@'192.168.1.200';
刷新权限
flush privileges;
查看数据库状态
mysql> show master status; +-----------------+----------+--------------+------------------+-------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +-----------------+----------+--------------+------------------+-------------------+ | myql-bin.000004 | 445830 | | mysql | | +-----------------+----------+--------------+------------------+-------------------+ 1 row in set (0.00 sec)
记录下file和Position的值
从机上配置需要赋值的主机
命令
change master to master_host='192.168.1.200', master_user='root205', master_password='123456', master_log_file='mysql-bin.000001', master_log_pos=156;
开启slave
start slave;
show slave status \G;
Slave_IO_Running: Yes Slave_SQL_Running: Yes
这两个都为yes,代表成功
停止主从复制
stop slave;
评论区