mariadb主从复制及互为主从配置过程

环境准备:此次试验需准备3台已安装完成的mariadb数据库。
实验结果:2台数据库互为主从,实现数据实时同步,一台为主从备份,做备份的目的。
A.配置主从复制。
1.先安装mariadb编译安装及yum源安装都可以,此实验环境使用的是linux6.4编译安装的mariadb5.5,此处不在描述。
2.数据库安装完成后,编译配置文件my.cnf。

主服务器:
server-id= 160  //server-id 必须唯一,
log-bin=mysql-bin  //开启二进制日志
# binlog-do-db = testdb //只记录testdb库变化,多个库用‘,’分隔
# binlog-ignore-db=mysql //忽略mysql库变化,多个库用‘,’分隔
从服务器:
server-id= 162  //server-id 必须唯一,
log-bin=mysql-bin  //开启二进制日志
#log-slave-updates  //当做级联复制,或者从库做备份时A-->B-->C,B服务需要开启log-bin和log-slave-updates,二者缺一不可
# expire_logs_days =7 //当binlog日志较多时,此参数的值意思是只保留7天内的数据。主库及从库都可以配置此参数。
# replication-do-db = testdb //只同步testdb库,多个库用‘,’分隔
# replication-ignore-db=mysql //不同步mysql库,多个库用‘,’分隔
# replication-do-table = test_tb 只同步test_tb表,多个表用‘,’分隔
# replication-ignore-table = test_tb 不同步test_tb表,多个表用‘,’分隔
# replication-wild-do-table = test_tb //同replication-do-table一样,可以加通配符
# replication-wild-ignore-table = test_tb //同replication-ignore-table一样,可以加通配符

3.修改完成后重启mysql服务。

#service mysqld restart

4.在主服务器上建立帐户并授权slave

mysql>GRANT REPLICATION SLAVE ON *.*  TO sqlsync@10.33.133.162 IDENTIFIED BY '123456';
mysql>FLUSH PRIVILEGES;

5.此时不能有数据写入数据库。
执行以下命令锁定数据库以防止写入数据

   mysql>FLUSH TABLES WITH READ LOCK;

6.登录主服务器的mysql,查询master的状态

 mysql>show master status;
   +------------------+----------+--------------+------------------+
   | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
   +------------------+----------+--------------+------------------+
   | mysql-bin.000001 |      517 |              |                  |
   +------------------+----------+--------------+------------------+
   1 row in set (0.00 sec)

注:执行完此步骤后不要再操作主服务器MYSQL,防止主服务器状态值变化

解锁数据表。

   mysql>UNLOCK TABLES;

7、配置从服务器Slave:

 mysql>change master to master_host='10.33.133.160',master_user='sqlsync',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=517;   //注意不要断开,517数字前后无单引号。
   Mysql>start slave;    //启动从服务器复制功能

8、检查从服务器复制功能状态:

 mysql> show slave status\G

   *************************** 1. row ***************************

              Slave_IO_State: Waiting for master to send event
              Master_Host: 10.33.133.160  //主服务器地址
              Master_User: sqlsync   //授权帐户名,尽量避免使用root
              Master_Port: 3306    //数据库端口,部分版本没有此行
              Connect_Retry: 60
              Master_Log_File: mysql-bin.000001
              Read_Master_Log_Pos: 822    //#同步读取二进制日志的位置,大于等于Exec_Master_Log_Pos
              Relay_Log_File: ddte-relay-bin.000001
              Relay_Log_Pos: 251
              Relay_Master_Log_File: mysql-bin.000001
              Slave_IO_Running: Yes    //此状态必须YES
              Slave_SQL_Running: Yes     //此状态必须YES
                    ......

注:Slave_IO及Slave_SQL进程必须正常运行,即YES状态,否则都是错误的状态(如:其中一个NO均属错误)。

至此我们mysql服务器的主从复制架构已经完成,但是我们现在的主从架构并不完善,因为我们的从服务上还可以进行数据库的写入操作,一旦用户把数据写入到从服务器的数据库内,
然后从服务器从主服务器上同步数据库的时候,会造成数据的错乱,从而会造成数据的损坏,所以我们需要把从服务器设置成只读
方法:

   mysql> SHOW global variables like 'read%';   //查看read_only 状态
+----------------------+--------+
| Variable_name        | Value  |
+----------------------+--------+
| read_buffer_size     | 131072 |
| read_only            | OFF    |
| read_rnd_buffer_size | 262144 |
+----------------------+--------+
 rows in set (0.01 sec)   
 mysql> SET GLOBAL read_only=1;    //此为全局变量,只有管理员才有权限配置。设置read_only为只读,当前环境生效,重启后失效。
 vim /etc/my.cnf 添加一行read_only=1   //让此项全局有效。
 注意:read-only = ON ,这项功能只对非管理员组以为的用户有效!

B.配置主<—>主同步。

1.主服务器:(此处主服务器是上面主从复制的主服务器,已配置好server-id故不需要配置此项)

relay-log = relay-mysql   //开启二进制日志
relay-log-index =relay-mysql.index    //开启中继日志
auto-increment-increment = 2   //每次跳两个数
auto-increment-offset = 1      //从一开始

2.从服务器:

server-id= 161  //server-id 必须唯一,
relay-log = relay-mysql   //开启二进制日志
relay-log-index =relay-mysql.index    //开启中继日志
auto-increment-increment = 2   
auto-increment-offset = 2      

3.配置完成后重启服务。

#service mysqld restart

4.此时两台服务器均为新建立,且无其它写入操作,各服务器只需记录当前自己二进制日志文件及事件位置,以之作为另外的服务器复制起始位置即可

#master
MariaDB [(none)]> show master status;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000002 |      245 |              |                  |
+------------------+----------+--------------+------------------+
1 row in set (0.01 sec)
#slave
MariaDB [(none)]> show master status;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000004 |      245 |              |                  |
+------------------+----------+--------------+------------------+
1 row in set (0.01 sec)

5.两台服务器上分别创建账户和权限,来进行同步设置。

#master
mysql>GRANT REPLACTION SLAVE ON *.* TO sqlsync@10.33.133.161 IDENTIFIED BY '123456';
#slave
mysql>GRANT REPLACTION SLAVE ON *.* TO sqlsync@10.33.133.160 IDENTIFIED BY '123456';

6.各服务器上指定对另一台服务器为自己的主服务器:

#master
mysql>change master to master_host='10.33.133.161',master_user='sqlsync',master_password='123456',master_log_file='mysql-bin.000002',master_log_pos=245;
#slave
change master to master_host='10.33.133.160',master_user='sqlsync',master_password='123456',master_log_file='mysql-bin.000004',master_log_pos=245;

7.启动复制进程;

mysql>start slave;

8、检查从服务器复制功能状态:

 mysql> show slave status\G

   *************************** 1. row ***************************

              Slave_IO_State: Waiting for master to send event
              Master_Host: 10.33.133.160  //主服务器地址
              Master_User: sqlsync   //授权帐户名,尽量避免使用root
              Master_Port: 3306    //数据库端口,部分版本没有此行
              Connect_Retry: 60
              Master_Log_File: mysql-bin.000001
              Read_Master_Log_Pos: 245    //#同步读取二进制日志的位置,大于等于Exec_Master_Log_Pos
              Relay_Log_File: ddte-relay-bin.000004
              Relay_Log_Pos: 245
              Relay_Master_Log_File: mysql-bin.000002
              Slave_IO_Running: Yes    //此状态必须YES
              Slave_SQL_Running: Yes     //此状态必须YES

以上主到主配置完成。

配置中遇到的错误总结:

在配置主<–>主的过程中,因在从服务器之前配置过主–>从的模式,导致start slave无法启动。查看mysql错误日志。
报错Failed to open the relay log ‘./mysqld-relay-bin.000025’ (relay_log_pos 251)。
到mysql主服务器配置文件/var/lib/mysql/master.info
修改之前配置的master_log_file和master_log_pos值为现在主服务器上的值。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值