数据库有个bin-log二进制文件,记录了所有sql语句。我们的目标就是把主数据库的bin-log文件的sql语句复制过来。让其在从数据的relay-log重做日志文件中再执行一次这些sql语句即可。下面的主从配置就是围绕着这个原理配置。具体需要三个线程来操作。
具体需要三个线程来操作
** 去请求主库的binlog,并将得到的binlog日志写到relay-log(中继日志)文件中。
主库会生成一个log dump线程**,用来给从库i/o线程的binlog。
SQL线程,会读取relaylog文件中的日志,并解析成具体操作,来实现主从的操作一致,而最终数据一致。
修改my.cnf文件,增加以下内容
log-bin=mysql-bin
binlog_format=mixed
server-id=101
参数解释:
log-bin=mysql-bin //将mysql二进制日志取名为mysql-bin
binlog_format=mixed //二进制日志的格式,有三种:statement/row/mixed,具体分别不多做解释,这里使用mixed
server-id=101 //为服务器设置一个独一无二的id便于区分,这里使用ip地址的最后一位充当server-id
修改完之后重启mysql
service mysqld restart
GRANT replication slave ON *.* TO 'mysql105'@'192.168.1.104' IDENTIFIED BY '123456';
FLUSH PRIVILEGES;
show master status;
log-bin=mysql-bin
binlog_format=mixed
server-id=105
唯一的区别是,server-id要和主mysql的server-id不一样,即server-id=105;其他两项是一样的,保存,并重启mySQL;
修改完之后重启mysql
service mysqld restart
进入从服务器mysql
命令: # mysql -u root -p
关闭slave(如果你以前配置过主从的话,一定要先关闭)
命令:stop slave;
开始配置:
输入下面代码即可:
CHANGE MASTER TO MASTER_HOST="192.168.1.103",
MASTER_USER="mysql105",
MASTER_PASSWORD="123456",
MASTER_PORT=3306,
MASTER_LOG_FILE="mysql-bin.000001",
MASTER_LOG_POS=593;
参数解释:MASTER_HOST : 设置要连接的主服务器的ip地址
MASTER_USER : 设置要连接的主服务器的用户名
MASTER_PASSWORD : 设置要连接的主服务器的密码
MASTER_LOG_FILE : 设置要连接的主服务器的bin日志的日志名称,即第3步得到的信息
MASTER_LOG_POS : 设置要连接的主服务器的bin日志的记录位置,即第3步得到的信息,(这里注意,最后一项不需要加引号。否则配置失败)
start slave;
show slave status;
或者
show slave status\G;
stop slave;
数据库的一致性:
由MySQL主从复制的过程分析可知,主从复制过程其实就是二进制日志读取,传输,接收,解析执行的过程,故整个过程涉及到的主要资源包括:CPU,内存,磁盘IO,网络IO。所以在发生延迟太多时,可以观察对应时刻的以上硬件资源的负载和使用情况。
在后续的博客中会使用pcx集群方案解决数据同步延迟最终一致性的致命问题