阅读本文之前,请确认你已通读并实践了本站列出的相关文章内容。
1.准备环境
操作系统:.4 64位
版本:10.2.12
节点DB1:192.168.11.31
节点DB2:192.168.11.32
开了防火墙策略的需要开放端口(默认3306)。
2.配置DB1的配置文件(f)
在/etc/f中添加以下选项:
server-id = 1
log-bin=mysql-bin
relay-log = mysql-relay-bin
复制野生忽略表=mysql.。
复制野生忽略表=信息架构.%
log-slave-updates=on
slave-skip-errors=all
auto-increment-offset=1
auto-increment-increment=2
binlog_format=mixed
expire_logs_days = 10
-id = 1服务器节点ID,必须唯一。
启用二进制日志功能,采用mysql-bin命名格式,会创建文件名以mysql-bin.开头的日志文件,这些文件会不断累积。
中继日志是mysql-relay-bin,当设备作为从服务器运行时,该文件充当中继日志的角色。
复制过滤选项-wild-table用于筛选无需同步的数据库或数据表,例如设置“mysql.%”则不会复制MySQL数据库中的任何数据表,以此类推,针对不同的数据库需要分别配置对应的规则。不应当在主数据库或从数据库上运用-do-db或--db,同样不该在从数据库上运用-do-db或-do-db参数,否则可能造成跨库修改失败的情况。我们建议采用-wild-do-table和-wild--table来处理复制筛选的难题。
log-slave-= 将复制事件写进自己的二进制日志。
该指令能够绕过所有在主从复制过程中出现的异常状况或特定种类的异常状况,确保从服务器的数据复制过程不会中断。
auto--=1主键自增规则,自增因子(每次加2)。
auto--=2主键自增规则,自增偏移(从1开始),单数。
混合主从复制的格式,以混合,行,作为基准,标准模式是空值。
= 10日志保存天数:10天。
3.配置DB2的配置文件(f)
在/etc/f中添加以下选项:
server-id = 2
log-bin=mysql-bin
relay-log = mysql-relay-bin
replicate-wild-ignore-table=mysql.%
replicate-wild-ignore-table=information_schema.%
log-slave-updates=on
slave-skip-errors=all
auto-increment-offset=2
auto-increment-increment=2
binlog_format=mixed
expire_logs_days = 10
DB2的f的配置基本一致,主主模式下区别有两个:
该节点编号为2,必须确保其标识符是独一无二的,且不能与DB1的编号相同。
主键自动增长,初始值设为2,每次递增2,仅赋予偶数值,DB1则采用单数值,二者交替使用,确保ID呈现奇偶排列,避免重复,从而维护表中主键的唯一性
这两台服务器DB1和DB2上运行的是最新安装的数据库系统,里面没有其他数据表,如果您的数据库中已经存储了信息,那么最好确保DB1和DB2中的数据完全相同,在进行数据同步操作之前,可以先暂停数据库的写入功能,然后重启相关服务程序
配置好的配置文件后,保存并重启服务,使配置生效。
/etc/init.d/mariadb restart
这里已经依据文章《Linux下使用二进制格式安装》完成安装,倘若你采用yum途径进行安装,可以试试指令:.DB1用以授权给DB2
在DB1中进入到MySQL终端:
在本地主机目录下,使用本地MariaDB数据库,输入root账号密码进行登录
接下来,用户可以借助密码,经由IP地址192.168.11.32(DB2)登录至DB1,同时被授权复制并同步数据。
MariaDB [(none)]> 授予复制主服务器权限, 授予复制客户端权限, 对所有数据库, 对所有表, 给用户'hello32'@'192.168.11.32', 需要密码'123456x';
mysql> flush privileges;
授权完毕后记得刷新权限表。
紧接着立刻核对文档的(位置)和File(记录簿)的数据,从这边(DB2)必须借助:
MariaDB 当前未选择数据库, 执行查询主状态信息
把表格的标题分成几段来写,每段之间用逗号隔开,第一段是加号加六条横线,第二段是加号加一条横线,第三段是加号加七条横线,第四段是加号加六条横线,最后以句号结束
文件名, 位置, 数据库记录日志选项, 数据库忽略记录日志选项
+------------------+----------+--------------+------------------+
数据库文件 mysql-bin.000007 包含了 358 条记录,其中没有任何注释信息,也没有其他详细描述内容。
+------------------+----------+--------------+------------------+
1 row in set (0.01 sec)
6.DB2作为授权给DB1
同样的,进入DB2的MySQL终端,授权给DB1的用户:
MariaDB [(none)]> 授予复制主节点权限, 授予复制客户端权限, 对所有数据库, 对所有表, 给用户'hello31'@'192.168.11.31', 使用密码'123456x';
mysql> flush privileges;
随后立即检查文档的(位置)和File(记录簿)的数据,从机上(DB1)必须获取:
MariaDB [(none)]> show master status;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
数据库文件 mysql-bin.000013,大小为 358,其他信息不详,没有进一步数据补充。
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
7.配置DB1的Slave
DB1充当从属数据库,需连接到主数据库DB2,其指令如下:
MariaDB [(none)]> 设置主服务器地址为192.168.11.32,指定从机用户名为hello31,从机密码为123456x,设定从机端口为3306,从机日志文件名为mysql-bin.000013,从机日志位置为358,从机重连间隔为30秒
日志文件以及偏移量,是在第6步DB2中show命令里查到的信息,=30代表的是尝试连接持续的时间。
8.配置DB2的Slave
现在DB2作为Slave从库,需要连接主库DB1:
MariaDB [(none)]> 设置主服务器地址为192.168.11.31,指定从机用户名为hello32,从机密码为123456x,设定从机端口为3306,从机日志文件名为mysql-bin.000007,从机日志位置为358,从机重连间隔为30秒
这里的日志文件和偏移值是第5步DB1中查看到的。
9.启动Slave
现在可以启动同步复制了,在两台服务器上分别使用命令:
MariaDB 正在执行主从同步初始化操作,接下来将尝试启动从属服务器进程,请稍等片刻
查询成功,没有数据被改动,用时零秒
在DB1上执行:
MariaDB 的当前状态查询指令为显示从属服务器的情况,具体命令格式为展示从属服务器运行状态信息
横线下的句子被彻底改变了,它不再是原来的样子,但意思保持不变,句子结构也完全不同,使用了全新的词汇,让读者感到惊讶,原来可以这样表达,这就是语言的魅力所在。
从属端输入状态:正等待主端发送事件
Master_Host: 192.168.11.32
Master_User: hello31
Master_Port: 3306
Connect_Retry: 30
主日志文件名称为 mysql-bin.000013
Read_Master_Log_Pos: 358
转发日志文件名:mysql中继二进制文件000002
Relay_Log_Pos: 555
继电器主日志文件:mysql-bin.000013
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
复制野生忽略表:mysql中的所有模式,信息架构中的所有模式
在DB2上执行:
MariaDB [(none)]> show slave status\G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.11.31
Master_User: hello32
Master_Port: 3306
Connect_Retry: 30
主日志文件是 mysql-bin.000007
Read_Master_Log_Pos: 358
Relay_Log_File: mysql-relay-bin.000002
Relay_Log_Pos: 555
继电器主日志文件:mysql-bin.000007
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table: mysql.%,information_schema.%
观察到两台服务器的数据同步状态均为肯定,表明我们的设置已经顺利完成
10.验证
在DB1中创建一个新数据库,接着在数据库内建立一个新表格,然后向表格里添加一条记录。
MariaDB [(none)]> 假如数据库不存在,则建立名为 myhelloweba 的数据库,其默认字符集为 utf8,排序规则为 utf8_general_ci。
MariaDB 的当前环境未指定,切换到名为 myhelloweba 的数据库,
Database changed
MariaDB [myhelloweba]中, 执行插入操作, 表名为article, 字段包括id和title, 其中id使用默认值null, title设置为'Helloweba';
查询成功,一条记录被更改,耗时零点零一秒。
MariaDB [myhelloweba]> insert into article (id,title) values (null, 'Helloweba');
Query OK, 1 row affected (0.01 sec)
我们在到DB2查看数据表:
MariaDB [myhelloweba]查询文章表所有数据,包括全部列,结果以表格形式展示,内容来自数据库记录,信息完整无缺失,数据真实有效。
+----+-----------+
| id | title |
+----+-----------+
| 1 | Helloweba |
+----+-----------+
1 row in set (0.00 sec)
检测到DB2的表数据已同步完成,经过多次验证,确认两台数据库中的信息完全相同,证明我们的主主复制方案已经成功实施。
总结
必须严格依照这十项步骤依次执行,网络上有许多关于主主配置的说明,但多数内容组织混乱,容易让人混淆。而且,后续还会发布一篇阐述主主高可用策略的文章,敬请期待。
扫一扫在手机端查看
我们凭借多年的网站建设经验,坚持以“帮助中小企业实现网络营销化”为宗旨,累计为4000多家客户提供品质建站服务,得到了客户的一致好评。如果您有网站建设、网站改版、域名注册、主机空间、手机网站建设、网站备案等方面的需求,请立即点击咨询我们或拨打咨询热线: 13761152229,我们会详细为你一一解答你心中的疑难。


客服1