1、主从复制的原理:
*Master,记录数据更改操作
- 启用binlog记录模式
- 允许Slave读取binlog日志
*Slave运行2个同步线程
- Slave_IO:负责连接Master,复制其binlog日志文件到本机的relay-log文件
- Slave_SQL:执行本机relay-log文件里的SQL语句,重现Master的数据操作
2、基本构建思路:
1)初始化现有库:将主库导入从库,确保数据一致性
2)配置Master,主服务器:调整运行参数,授权一个同步用户
3)配置Slave,从服务器:调整运行参数,发起同步操作
3、初始化现有库:
**从数据库服务器上一定要有主数据库服务器的库和表,但主数据库服务器上不需要必须有从数据库服务器上的库和表。从服务器应包括希望同步的所有库,对采用MyISAM的库,可离线备份。
mysql>reset master; //重置binlog日志
[root@svr~]#mysqldump -uroot -p123 -B mysql test db6000 >/dbbak/threedb.sql //完整备份主服务器数据库文件
对于从服务器,离线导入由主服务器提供的备份,清空同名库(若有的话)
Mysql>drop database test;
[root@pc~]#scp svr:/dbbak/threedb.sql /root/ //远程拷贝主服务器备份文件
[root@pc~]#mysql -uroot -p123 <threedb.sql //恢复主服务器的备份文件到本机数据库
**从数据库服务器如果是克隆的虚拟机的话要修改下面文件uuid的值
[root@localhost mysql]# cat /var/lib/mysql/auto.cnf
[auto]
server-uuid=a1c22f29-7d1a-11e4-b7f9-099e0022adfD
4、配置主服务器:
1)调整运行参数,启用binlog及允许同步
[root@svr~]#vim /etc/my.cnf
[mysqld]
Log_bin //启用binlog日志
Server_id=6 //指定服务器ID号,标识自己身份,一般使用IP地址主机位
Innodb_flush_log_at_trx_commit=1 //优化设置
Sync-binlog=1 //允许日志同步
……
[root@svr~]#service mysql restart //重启服务,使设置生效
2)授权备份用户:允许slaveuser从192.168.4.0/24网段访问,对所有库(默认不允许对单个库)有同步权限
mysql>grant replication slave on *.* to slaveuser@”192.168.4.%” identified by “123”;
3)查看主服务器状态,记住当前的binlog日志文件名、偏移量pos点号
mysql>show master status\G; //查看当前正在使用的binlog日志文件名和偏移量 pos点号
file:svr6-bin.000003 //日志文件名
position:335 //偏移量
……
5、配置从服务器:
1)调整运行参数,启用binlog及允许同步,启用只读模式
[root@pc~]#vim /etc/my.cnf
[mysqld]
log_bin //启用binlog日志
server_id=20 //指定服务器ID号
Innodb_flush_log_at_trx_commit=1 //优化设置
sync-binlog=1 //允许日志同步
read_only=1 //只读模式
……
[root@pc~]#service mysql restart //重启服务,使设置生效
2)发起同步操作,指定主服务器相关参数
[root@pc~]#mysql -uroot -p123
mysql> show slave status;
mysql>change master to master_host="192.168.4.6",
master_user="slaveuser",
master_password="123456",
master_log_file="svr6-bin.000003", //binlog日志文件
master_log_pos=335; //偏移量pos点号
mysql> showslave status\G;
slave_IO_Running: No
slave_SQL_Running: No
mysql>start slave; //启动复制
mysql> show slave status\G; //查看从服务器状态
slave_IO_Running: YES //IO线程已运行
slave_SQL_Running: YES //SQL线程已运行
6、测试主从同步效果:
在主数据库服务器本机登录,建库建表,从数据库服务器上有主数据库服务器上的库和表,在主数据库服务器执行插入、更新操作,从服务器有同步更新,就成功了。
7、MySQL数据库主从同步工作原理:
1)Slave_IO_Running:负责把主数据库服务器当前正在使用的binlog日志里的sql语句,拷贝到本机relaybinlog日志里,在master_log_file的文件里从master_log_pos开始拷贝
Master.info :保存主从关联信息(change master to……),启动服务时加载。
pc205-relay-bin.000002 pc205-relay-bin.index relay-log.info
vim /etc/my.cnf
[mysqld]
Relay_log=……
2)Slave_SQL_Running:负责执行本机relaybinlog日志里的sql语句,把数据写进数据库里
3)报错信息:
IO进程出错:查看状态时Last_IO_Errno: 0 //错误次数
Last_IO_Error: //最后一次出错信息
IO出错的情况:
- 连接不上主数据库服务器(ping iptables selinux 授权 主服务器当前使用的日志文件和节点指错(在主服务器使用show master status;查看在从服务器使用change master to ……重新设置,要先停止进程 stop slave;改好后start slave;) )
SQL进程出错:Last_SQL_Errno: 0
Last_SQL_Error:
SQL出错的情况:和主数据库服务器上的库、表、表结构不一致(把主服务器上的库、表备份还原到从服务器上)
4)停止从服务器:
stop slave;
删除Master.info pc205-relay-bin.000002 pc205-relay-bin.index relay-log.info
8、主从同步的结构模式:
1)一主一从:主服务器坏掉访问从服务器的时候,从服务器的数据没有备份;从服务器坏掉的时候主服务器的数据也没有备份里
2)一主多从:配置时在主服务器上授权多个slave用户在做从服务器的主机上连接自己;或者授权一个用户在@“%”所有主机连接自己(不安全)。
3)主从从:配置主从,配置从从(同主从),主服务器和从从服务器不同步,客户端连接从服务器产生的sql语句记录到本身的binlog日志,而拷贝的主服务器的sql语句记录到relaybinlog日志里,从从服务器只读取从服务器本身binlog日志。要主服务器和从从服务器同步,要配置从服务器:
Vim /etc/my.cnf
[mysqld]
……
Log-slave-updates //记录从库更新,允许链式复制(A-B-C)配置后从主服务器同步过来的日志即写到relaylog里也写到自己的binlog日志里,以便自身的从服务器根据binlog读取日志以同步数据
……
4)主主结构:互为主从
9、仅需要从服务器备份主服务器的某个或某些库:
授权时不可以仅对某库授权,replicationslave授权必须时全局授权
**在配置主从同步时,在主数据库服务器上设置让从数据库服务器如何备份自己的库:
Vim /etc/my.cnf
[mysqld]
……
Binlog-do-db=数据库名 //设置主服务器对哪些库记binlog日志,此选项可设置多条,省略时复制所有库
Binlog-ignore-db=数据库名 //设置主服务器对哪些库不记binlog日志(两条矛盾,不同时用)
……
**或在配置主从同步时,在从数据库服务器上设置自己如何备份主数据库服务器的库:
Vim /etc/my.cnf
[mysqld]
……
Replicate-do-db=数据库名 //仅复制指定库,其他库将被忽略,此选项可设置多条,省略时复制所有库
Replicate-ignore-db=数据名 //不复制哪些库(两条矛盾,不同时用)
**只在主服务器或从服务器一端设置即可。
本文出自 “IT技术学习” 博客,请务必保留此出处http://learningit.blog.51cto.com/9666723/1789591
原文地址:http://learningit.blog.51cto.com/9666723/1789591