主从同步的原理图:
主从同步描述:
1、设置主从服务器的server-id为不同数字;
2、设置主库log_bin目录等配置;
3、设置从库relay-log目录等配置;
4、主库给从库授权访问;
5、在从服务器上设置同步命令;
6、start slave;
1、在配置好主从同步以后, 主服务器会把更新语句写入binlog, ;
2、从服务器的IO 线程(这里要注意, 5.6.3 之前的IO线程仅有一个,5.6.3之后的有多线程去读了,速度自然也就加快了)会去读取主服务器的Binary log 并且写到从服务器的Relay log 里面 (relay 就是 传递);
3、然后从服务器的 的SQL thread 会一个一个执行 Relay log 里面的sql , 进行数据恢复。
主库配置举例:
[mysqld]
log-bin=/var/lib/mysql/binlog
server-id=1
binlog-do-db = cmdb
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
......
server-id:master端的ID号;
log-bin:同步的日志路径及文件名,一定注意这个目录要是mysql有权限写入的(我这里是偷懒了,直接放在了下面那个datadir下面);
binlog-do-db:要同步的数据库名
还可以显示 设置不同步的数据库:
binlog-ignore-db = mysql 不同步mysql库和test库
binlog-ignore-db = test
从库配置举例:
[mysqld]
server-id=2
master-host=192.168.8.10
master-user=rep1
master-password=test123456
master-port=3306
replicate-do-db=cmdb
......
重启时报错:mysqld: unknown variable ‘master-host=
说明mysql不认识这些变量,网上搜罗了一番,原因是mysql5.5+版本主从复制不支持这些变量,需要在从库上用命令来设置:
mysql> CHANGE MASTER TO MASTER_HOST='192.168.8.10',
MASTER_PORT=3306,
MASTER_USER='rep1',
MASTER_PASSWORD='test123456',
MASTER_LOG_FILE='binlog.000001',
MASTER_LOG_POS=1304; #后面两个参数的值与主库保持一致