主从同步机制
Mysql服务器之间的主从同步是基于二进制日志机制,主服务器使用二进制日志来记录数据库的变动情况,从服务器通过读取和执行该日志文件来保持和主服务器的数据一致
在使用二进制日志时,主服务器的所有操作都会被记录下来,然后从服务器会接收到该日志的-一个副本 从服务器可以指定执行该日志中的哪一类事件(譬如只插入数据或者只更新数据), 默认会执行日志中的
所有语句。
每一个从服务器会记录关于二进制日志的信息:文件名和已经处理过的语句,这样意味着不同的从服务器可以分别执行同一个二进制日志的不同部分,并且从服务器可以随时连接或者中断和服务器的连接。
主服务器和每-个从服务器都必须配置-个唯一 的ID号 (在my.cnf文件的[mysqld]模块 下有-个server-id配
置项), 另外,每一个从服务器还需要通过CHANGE MASTER TO语句来配置它要连接的主服务器的ip地址,日志文件名称和该日志里面的位置(这些信息存储在主服务器的数据库里)
配置主从同步的基本步骤
有很多种配置主从同步的方法,可以总结为如下的步骤:
1.在主服务器上,必须开后二进制日志机制和配置- -个独立的ID
2.在每一个从服务器上,配置一个唯一的ID,创建一.个用来专门复制主服务器数据的账号
3.在开始复制进程前,在主服务器,上记录二进制文件的位置信息
4.如果在开始复制之前,数据库中已经有数据,就必须先创建一个数据快照(可以使用mysqldump导出
数据库,或者直接复制数据文件)
5.配置从服务器要连接的主服务器的IP地址和登陆授权,二进制日志文件名和位置
详细配置主从同步的方法
主和从的身份可以自己指定,我们将虛拟机Ubuntu中MySQL作为主服务器,将Windows中的MySQL作为
从服务器在主从设置前,要保证Ubuntu与Windows间的网络连通
在主服务器上进行备份
mysqldump -uroot -pmysql --all-databases --lock-all-tables > ~/master_ _db.sql
说明
●-u:用户名,
●-p:示密码
●-all-databases : 导出所有数据库.
●–lock-all-tables :执行操作时锁住所有表,防止操作时有数据修改
●~/master_ _db.sql :导出的备份数据(sq|文件) 位置,可自己指定
在从服务器Windows上进行数据还原
找到Windows上mysq|命令的位置
新打开的命令窗口’在这个窗口中可以执行类似在Ubuntu终端中执行的mysq|命令
将从主服务器Ubuntu中导出的文件复制到从服务器Windows中,可以将其放在上面mysq|命令所在的文件
夹中,方便还原使用
在刚打开的命令黑窗口中执行还原操作:
mysql -uroot -pmysql < master db.sql
配置主服务器 (windows 环境)
找到 my.ini
1. 添加配置信息
# 主从复制
server-id=1 #设置server-id
log-bin=mysql-bin #开启二进制文件
#同步的数据库,除此之外别的不同步(和下面binlog-ignore-db二选一)
binlog_do_db=testdb
#不同步数据库,除此之外都同步
#binlog-ignore-db = information_schema
#binlog-ignore-db = mysql
2、重启MySQL服务
3、在主库中建立一个用户(专门用给从库连接的,注意这是在主库里面建立的),执行以下SQL:
以管理员身份打开cmd窗口后,运行mysql -uroot -p,输入密码(为空则直接回车),登陆。
-- 主库执行
-- 在主库中建立一个用户(专门用给从库连接的,注意这是在主库里面建立的)
-- slave是用户名, 后面的123456是密码, %是不限制从服务器,也可以把%改成从服务器 ip
GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' identified by '123456';
4刷新权限, 执行以下SQL:
FLUSH PRIVILEGES;
5显示主库状态, 执行以下SQL:
show master status;
从库配置(windows环境)
1.停止从库服务
2打开从库my.ini文件进行,在最下方添加跟主服务器同样配置信息
# 主从复制
server-id=2 #设置 此id不可以与主服务器配置的id一样
log-bin=mysql-bin #开启二进制文件
#同步的数据库,除此之外别的不同步(和下面binlog-ignore-db二选一)
binlog_do_db=testdb
#不同步数据库,除此之外都同步
#binlog-ignore-db = information_schema
#binlog-ignore-db = mysql
3配置好之后保存,重启主库MySQL服务即可。
4.用root账户登录 msqyl执行以下SQL,连接主库:
--
change master to master_host='主服务器ip',master_user='slave',master_password='123456', master_log_file='mysql-bin.000001',master_log_pos=1370;
5从库执行
-- 停止从服务器复制功能
stop slave;
在执行
-- 启动从服务器复制功能
start slave;
6查看从库状态
-- 显示从库状态
show slave status;
检查查询结果,主要看下面几个
Slave_IO_Running: Yes
此状态必须YES
Slave_SQL_Running: Yes
此状态必须YES
这两个都是YES 就完成了主从配置