1.为什么要主从?
什么东西都有丢失或损坏的可能,所以备份是一个重要的手段。
2.备份机制?
对于主从库的分工: "主写从读"
中继日志文件我的理解是一个大的临时区,主库推送过来的数据不用同步进行到从库,这样会快一些,因为C线程工作相对慢的过程,它可以慢慢消费中继日志的数据。
1.主库发生收到写请求后,A线程会更变二进制日志文件并推送sql到从库。
2.从库B线程负责接收并将读取的二进制文件写入到中继日志文件
3.从库C线程定时检测到中继日志文件的改变,就读取变化的sql并执行,这样完成主从复制
3.主从延迟切换,造成从库数据丢失
基于性能考虑,主库的写入流程是A线程异步执行,所以要推送的数据是不可控的,同步从库也是个时间差(即中从延迟)
在发生中从延迟时,数据库的性能会下降,此时切换到从库进行读写,虽然可以保证数据库的可用性,但是,中从延迟那部分数据的数据会丢失而且是不可逆的。
1.主库配置
1.1 找到配置文件 my.cnf (Window my.ini)这里以linux为准
server-id=1 #(唯一id,主库和从库不能重复)
log-bin=log/mybiglog #(设置存储目录,即开启二进制文件,随意)
binlog_row_image=full #当自建MySQL的版本大于5.6时,则必须设置该项
/etc/init.d/mysqld restart #修改完成后,重启MySQL进程
show master status #查看Binlog文件所在位置
1.2创建账户和分配权限
CREATE USER 'username'@'host' IDENTIFIED BY 'password';
username:待创建的账号。
host:允许该账号登录的主机,如果允许该账号从任意主机登录数据库,可以使用百分号(%)。
password:账号的密码。
对账号授予指定库表的权限。
GRANT privileges ON databasename.tablename TO 'username'@'host' WITH GRANT OPTION;
对账号授予建库建表的权限。
GRANT CREATE ON *.* TO 'username'@'host' WITH GRANT OPTION;
说明
privileges:授予该账号的操作权限,如SELECT、INSERT、UPDATE等,如果要授予该账号所有权限,则使用ALL。
databasename:数据库名。如果要授予该账号具备所有数据库的操作权限,则使用星号(*)。
tablename:表名。如果要授予该账号具备所有表的操作权限,则使用星号(*)。
username:待授权的账号。
host:允许该账号登录的主机,如果允许该账号从任意主机登录,则使用百分号(%)。
WITH GRANT OPTION:授予该账号使用GRANT命令的权限,该参数为可选。
例如,授予dtsmigration账号具备所有数据库和表的所有权限,并允许从任意主机登录数据库,命令如下。
GRANT ALL ON *.* TO 'dtsmigration'@'%';
CREATE USER 'rep1'@'%' IDENTIFIED BY '123456'; #创建用户
GRANT REPLICATION SLAVE ON *.* TO 'rep1'@'113.57.42.85'; #分配复制权限
flush privileges #刷新权限
show master status #查看主库状态
2.从库配置
server-id=2 #(唯一id,主库和从库不能重复)
2.2 重启mysql,打开mysql会话,执行同步sql脚本
mysql> CHANGE MASTER TO
-> MASTER_HOST='192.168.3.21',
-> MASTER_USER='rep1',
-> MASTER_PASSWORD='123456',
-> MASTER_LOG_FILE='binlog.000001', # 这是查询主库状态时数据 不能随意写
-> MASTER_LOG_POS=1; # 这是查询主库状态时数据 不能随意写
2.3 启动同步
start slave
2.4查看状态
show slave status
Mysql主从同步配置_Young丶的博客-CSDN博客