您的位置:首页 > 数据库 > MySQL

mysql主从

2015-11-02 00:25 609 查看
数据库读法约定:
主库: master
从库: slave

mysql 主从同步的原理:
#主从是异步模式,且是由从库找主库进行同步;

1、主库开启IO线程; 开启binlog;
#binlog记录用户的增删改

从库开启IO线程; 开启SQL线程;
2、主库授权从库同步的帐号密码;
3、备份主库数据且导入从库;
4、在从库change master to 导入用于同步主库的ip、port、user、等信息。
CHANGE MASTER TO
MASTER_HOST='10.0.0.%',
MASTER_PORT=3306,
MASTER_USER='rep',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='mysql-bin.000018',
MASTER_LOG_POS=330;
5、start slave 开启从库;
6、从库的IO线程向主库的IO线程发起请求;
主库的IO线程验证请求从库的账户、密码等信息是否合法;
主库返回从库请求的数据(file 、pos);
7、从库IO接受到主库的log日志后,将log写入中继日志relay-log;
从库SQL线程读取relay.log转换后写入从库;
#如果是级联,从库需记录logbin

从库master.info记录从库跟新的位置点;
8、从库IO线程继续向主库请求上一次位置点往下的binlog数据.....

mysql主从同步的步骤:
1)、准备两台数据库环境,或者单台多实例环境,可以正常启动和登录。

2)、配置my.cnf文件。主库配置log-bin和server-id 参数,从库配置server-id,id不可以和主库及其它从库一样,从库一般不开启log-bin功能,注意重启生效,(从库在备份、级联时开启binlog);
vi /etc/my.cnf 49 log-bin=mysql-bin 46 server-id = 1 #以上两个参数要放在my.cnf中的[mysqld]模块下,否则会出错; 查看:egrep -E "server-id|log-bin" /etc/my.cnf
server-id = 1
log-bin=mysql-bin 生效查看: А、ll ../mysql/data/下是否有mysql-bin.000005日志生成; Β、mysql -uroot-p123456 -e "show variables like 'log_bin';" 观察:| log_bin | ON | 是否为ON #如果从库是中继需开启binlog、开启log_slave_updates则可以写入。
3)、登录主库增加用于从库连接主库同步的帐号,例如:rep授权replicattion slave的权限;
grant resplication slave on *.* to"rep"@"10.0.0.%" identified by "123456"; 刷新权限: flush privileges; ##replication slave为mysql同步的必须权限,此处不要授权all; ##*.*表示所有库所有表,可以指定具体的库和表进行复制 ##"rep"@"10.0.0.%" rep为同步帐号。10.0.0.%为授权的网段,使用%表示整个10.0.0.0网段以rep用户访问;

4)、主库登录,整库锁表;然后查看binlog的位置状态; flush table with read lock; #窗口关闭后及失效,超时参数到了也失效) mysql> show masterstatus; +------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB |Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000022 | 107 | | | +------------------+----------+--------------+------------------+ 注意:flush tables with read lock 5.1 Flush table with readlock 5.5 mysql-bin.000022=file 107=pos 5)、新开窗口,linux命令行备份或导出原有数据库的数据,并拷贝到从库所在的服务目录; mysqldump -uroot -p123456 -B -A--master-data=1 --events --single-transaction >/back/my.back#备份,如果数据量很大,允许停机,可以停机打包,而不用mysqldump;
6)、解锁主库,unlock tables; 或者--master-data=17)、把主库导出的原有数据恢复到从库。8)、根据主库的show master status;查看binlog的位置状态,在从库执行changemaster to 语句; CHANGE MASTER TO
MASTER_HOST='10.0.0.8',
#主库的ip地址;
MASTER_PORT=3306,
#主库mysql的端口;
MASTER_USER='rep',
#主库允许从库备份的帐号
MASTER_PASSWORD='123456',
#允许帐号的密码,
MASTER_LOG_FILE='mysql-bin.000018',
#mysql-bin的位置;
MASTER_LOG_POS=330; CHANGE MASTER TO
MASTER_HOST='10.0.0.%',
MASTER_PORT=3306,
MASTER_USER='rep',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='mysql-bin.000018',
MASTER_LOG_POS=330;

9)、从库开启同步开关: start slave;10)、从库检查同步状态,并在主库进行跟新操作; Show slave status\G; Slave_IO_Running: Yes Slave_SQL_Running: Yes 为正常 线程的启动与关闭:停止MYSQL同步STOP SLAVE IO_THREAD; #停止IO进程STOP SLAVE SQL_THREAD; #停止SQL进程STOP SLAVE; #停止IO和SQL进程 启动MYSQL同步START SLAVE IO_THREAD; #启动IO进程START SLAVE SQL_THREAD; #启动SQL进程 START SLAVE; #启动IO和SQL进程RESET SLAVE; #重置MYSQL同步#
用于让从服务器忘记其在主服务器的二进制日志中的复制位置,
它会删除master.info和relay-log.info文件,以及所有的中继日志,并启动一个新的中继日志,当你不需要主从的时候可以在从上执行
这个操作。不然以后还会同步,可能会覆盖掉你的数据库,我以前就遇到过这样傻叉的事情。哈哈!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息