您当前的位置: 首页 > 学无止境 > 心得笔记 网站首页心得笔记
MySQL-5.5主从复制及半同步
发布时间:2019-06-08 20:51:15编辑:雪饮阅读()
上次讲到keepalived实现dr模式的lvs下的vip(ipvsadm)高可用,这次来介绍下mysql的主从复制。
今天所用mysql环境是mysql5.5.28(mysql-5.5.28-linux2.6-i686.tar.gz)
mysql主从复制
安装mysql
root@localhost src]# mkdir -p /mydata/data
[root@localhost src]# useradd -r mysql
[root@localhost src]# chown -R mysql.mysql /mydata/data
root@localhost src]# ln -sv /usr/local/src/mysql-5.5.28-linux2.6-i686 /usr/local/mysql
[root@localhost src]# cd /usr/local/mysql
[root@localhost mysql]# chown -R root.mysql ./*
[root@localhost mysql]# scripts/mysql_install_db --user=mysql --datadir=/mydata/data/
[root@localhost mysql]# cp support-files/my-large.cnf /etc/my.cnf
[root@localhost mysql]# cp support-files/mysql.server /etc/init.d/mysqld
[root@localhost mysql]# chkconfig --add mysqld
my.cnf配置
datadir = /mydata/data
主节点my.cnf配置
log-bin=master-bin
log-bin-index=master-bin.index
innodb_file_per_table = 1
sync_binlog = 1
主节点mysql服务启动后添加一个用于主从复制的mysql用户
mysql> grant replication slave on *.* to 'repluser'@'192.168.2.%' identified by 'replpass';
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
在主节点查看当前master状态,等会儿从服务器要根据此状态进行主从复制
mysql> show master status;
+-------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| master-bin.000001 | 340 | | |
+-------------------+----------+--------------+------------------+
1 row in set (0.01 sec)
从节点my.cnf配置
#log-bin=master-bin
#log-bin-index=master-bin.index
relay-log = relay-log
relay-log-index = relay-log.index
read_only = 1(对具有super权限的用户不生效)
server-id = 11(只要区别于master即可)
从节点mysql服务启动后将其master指向主节点mysql
mysql> change master to master_host='192.168.2.115',master_user='repluser',master_password='replpass',master_log_file='master-bin.000001',master_log_pos=340;
Query OK, 0 rows affected (0.02 sec)
从服务器开启主从复制
mysql> start slave;
Query OK, 0 rows affected, 1 warning (0.00 sec)
然后在主服务器上面建立数据,在从服务器上查看数据若同步过来了就ok了
从服务器停止主从复制
mysql> stop slave;
Query OK, 0 rows affected (0.00 sec)
注意
从服务器下次自动启动后也会自动从上次的master上进行主从复制,如果master出异常数据了,我们从服务器就算被手动停止了,也要做些其它工作,负责这还得了。
半同步的实现
半同步就是当一个master有多个slave时,进行数据同步的时候只要其中一个slave同步成功了,则其它的slave都会异步同步数据。
半同步基于以上主从复制的基础上来实现
master服务器配置
mysql> install plugin rpl_semi_sync_master soname 'semisync_master.so';
Query OK, 0 rows affected (0.01 sec)
mysql> set global rpl_semi_sync_master_enabled=1;
Query OK, 0 rows affected (0.00 sec)
slave服务器配置
mysql> install plugin rpl_semi_sync_slave soname 'semisync_slave.so';
Query OK, 0 rows affected (0.01 sec)
mysql> set global rpl_semi_sync_slave_enabled=1;
Query OK, 0 rows affected (0.00 sec)
测试半同步
slave服务器关闭io线程
mysql> stop slave io_thread;
Query OK, 0 rows affected (0.01 sec)
此时master服务器创建两个数据库
mysql> create database test4;
Query OK, 1 row affected (10.01 sec)
mysql> create database test5;
Query OK, 1 row affected (0.00 sec)
此时会发现master创建第一个数据库耗时10秒,第二个就很快
这是因为我们主从配置的默认连接时间是10秒,而master经过10秒连接确定了从服务器的io线程不可用,所以第二次就不用确定了,所以第二次就快了。
此时查看slave服务器没有新的数据库增加,但重新开启io线程后就会看到master新增的两个数据库被同步过来了。
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| test |
| test2 |
| test220807 |
| test3 |
+--------------------+
7 rows in set (0.00 sec)
mysql> start slave io_thread;
Query OK, 0 rows affected (0.00 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| test |
| test2 |
| test220807 |
| test3 |
| test4 |
| test5 |
+--------------------+
9 rows in set (0.00 sec)
关键字词:mysql5.5,主从复制,半同步