目录
2、搭建“线性一主一从”结构——从服务器节点server2的配置
2、搭建“一主多从”结构——从服务器节点server2/3的配置(GTID方式)
一、主从数据库
实验环境的设定
再开一个虚拟机server2,并在其中配置好mysql(这里可以使用server1中已经编译好的mysql)
先把server1中mysql的配置文件、执行命令脚本、编译文件原封不动地复制到server2中的相同目录下。
在server2中创建用户,创建mysql的资源目录,并指定所有人和所有组。
在server2中添加mysql的环境变量,并<source>一下令其生效。
对server2中的mysqld进行初始化操作
mysqld --initialize --user=mysql
得到初始化密码后,启动mysql,并更改初始化密码。
二、mysql的组成集群——主服务器的配置
1、官网资料
2、设置mysql服务器ID
在</etc/my.cfg>文件中新加两行,第一行表示服务器名称,第二行表示服务器ID号。
3、重启mysql服务
/etc/init.d/mysqld restart
查看数据库状态,可以正常使用。
4、mysql的所有日志文件
mysql的日志文件都在</data/mysql>目录下的<mysql-bin.000001>文件中。是一个加密的mysql专属二进制文件,可以使用专门的<mysqlbinlog>命令查看。
5、数据库内部操作——授权
第一个框表示设置密码“westos”,“repl”后跟得是域,"%"表示所有域。
第二个框表示授权, “repl”后跟得是域,"%"表示所有域,因此表示任何主机都有权访问。
第三个框的序号表示每次更改的日志编号,会显示最新的。
CREATE USER 'repl'@'%' IDENTIFIED BY 'westos';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
三、mysql的组成集群——从服务器的配置
1、更改配置文件,设置从服务器的ID为2(其实只要和1不一样就可以)
2、重启数据库
3、设置数据库的master(要跟随的)主机
CHANGE MASTER TO
MASTER_HOST='172.25.254.1', #要跟随的主机IP
MASTER_USER='repl', #要跟随的主机中的数据库的域
MASTER_PASSWORD='westos', #要跟随的数据库的密码
MASTER_LOG_FILE='mysql-bin.000001', #要跟随的数据库的日志文件
MASTER_LOG_POS=595; #压迫跟随的数据库的日志ID(从这个ID开始)
start slave; #启动跟随服务器
4、查看数据库状态
show slave status\G ;
看到这两行的“yes”就表示从服务器的mysql设置成功了。所列参数。
(4)测试
在server1主服务器中新建数据表。
更改数据表中的内容:
在server2中,什么都没动,在server1主服务器中新改动的数据会自动同步到server2从服务器中。
注意:此操作步骤为单向的,即在主服务器server1中更改会自动同步到从服务器server2中,千万不能在server2中更改数据,否则将导致主从不同步。所以一般从服务器中都为“只读”模式。
四、主从数据库基本原理
1、原理结构图
2、从服务器server2中的的数据文件信息
在从服务器server2中,数据目录</data/mysql/>中,其中<server2-relay-bin.index>中表示日志文件<server2-relay-bin.000002>的索引。
<master.info>中存有master主机的连接信息。
3、主从结构
通用的主从结构有两种,分为“一主多从”和“线性一主一从”
“线性一主一从”的好处是,A更新完只需要将数据同步到B,不用像“一主多从”结构中将数据同步到B和C,主服务器A的压力会小一些。
“一主多从”的结构比较适合“读多写少”的情形。
五、搭建线性“主-从1-从2”
1、搭建“一主两从”结构——新建从服务器节点server3
数据可以从之前的server1和server2中直接复制过去
在server3中进行如下配置:
启动mysql并更改密码
2、搭建“线性一主一从”结构——从服务器节点server2的配置
在server2的配置文件</etc/my.cnf>中添加以下两行。
第一行是启动二进制日志,以方便节点server3从server2中同步信息;
第二行是启动节点日志回放,就是说server2从server1中取到的数据回放到本机的二进制日志中。
更改完成后,重启server2的mysql服务,可以查看到
查看server2中的日志<mysqlbinlog mysql-bin.000001 -v>,可以看到在server1中刚做的更改已经同步到server2中了。
每次同步时系统只认<mysql-bin.000001>日志文件,而<server2-relay-bin.index>文件中纪录的是从server1中同步的记录索引,所有这些纪录的日志都要同步到<mysql-bin.000001>中。
3、mysql的数据备份及恢复------->同步过程
server1数据备份:
mysqldump -pwestos westos > dump.sql
实际生产环境中,一定要锁表。因为数据过多时,备份需要时间,不锁表的话在备份过程中有新数据写入就会造成备份数据混乱。
server3的数据恢复:
注意:小心这个坑。备份文件中的这句话表示:如果当前数据库中存在“users”表的话,得先删了它。
意思是,为了保持两个数据库的一致,先删除原本的库。
但是,如果实际需求是要做两个数据库的合并,那么备份的数据会直接覆盖之前的数据。对实际生产造成损失。
恢复过程:
先进入server3的数据库中,啥也没有,也没有<westos>表,所以就先创建了一个<westos>表。
恢复命令:
mysql -pwestos westos < dump.sql
server3的同步设置:
先在server2中添加授权,可以看到日志序号为1007,server3要跟随的话,就设置这个序号
CREATE USER 'repl'@'%' IDENTIFIED BY 'westos';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
flush privileges; #刷新数据库
然后在server3中设置slave跟随的master服务器信息,这里要做的是“线性一主一从”结构,所以server3要跟随的是server2。设置完成后,还要启动slave!!!然后查看server3中的slave信息,显示已成功。
CHANGE MASTER TO
MASTER_HOST='172.25.254.2', #要跟随的主机IP
MASTER_USER='repl', #要跟随的主机中的数据库的域
MASTER_PASSWORD='westos', #要跟随的数据库的密码
MASTER_LOG_FILE='mysql-bin.000001', #要跟随的数据库的日志文件
MASTER_LOG_POS=1007; #压迫跟随的数据库的日志ID(从这个ID开始)
4、测试
在server1中更改数据库,在server3中查看。可以看到,更改完成后立即被同步到server3中。
六、搭建“一主多从”结构
1、引入GTID的概念
补充知识点:一主一从的结构中,主服务器会自动寻找从服务器,因此GTID不需要特别配置。而一主多从结构中,主服务器故障时将会寻找距离它最“近”的从服务器,因此GTID需要手动配置。
GTID(Global Transaction Identifiers)——全局传输识别标识
mysql服务器的日志中会自动加入GTID表示下一步该找谁了。
2、搭建“一主多从”结构——从服务器节点server2/3的配置(GTID方式)
查看master的状态:
查看slave状态:
手动配置GTID:
手动配置GTID时,需要所有主从节点(server1/2/3)中加入以下两行内容;表示声明要使用GTID模式,并且强制启用。
在从节点server2和server3中设置mysql
change master to
master_host='172.25.254.1',
master_user='repl',
master_password='westos',
master_auto_position=1; #自动更新数据
server2:
server3:
测试:
在主节点server1中添加数据
在从节点server2中查看状态并查看数据,已经同步过来了(server3同样的道理)。
slave从节点跟随的master主节点信息会自动保存在<master.info>中