1主从同步

1.1Master

1.1.1配置--编辑 my.cnf

#编辑 mysql 的 /etc/my.cnf 配置文件
vi /etc/my.cnf

#添加如下配置
server-id=1  #设置服务 ID

log_bin=mysql-bin   #启动 binlog日志
sync-binlog=1  #控制数据库的binlog刷到磁盘上去 , 0 不控制,性能最好,1每次事物提交都会刷到日志文件中,性能最差,最安全
binlog_format = mixed   #binlog日志格式,mysql默认采用statement,建议使用mixed
expire_logs_days = 7                           #binlog过期清理时间
max_binlog_size = 100m                    #binlog每个日志文件大小
binlog_cache_size = 4m                        #binlog缓存大小
max_binlog_cache_size= 512m              #最大binlog缓存大
binlog-ignore-db=mysql,performance_schema,information_schema,sys #不生成日志文件的数据库,多个忽略数据库可以用逗号拼接,或者 复制这句话,写多行

#binlong-do-db=lagou #生成日志文件的数据库

slave-skip-errors = all #跳过从库错误

1.1.2重启 mysql 服务

systemctl restart mysqld  

1.1.3 mysql 开放权限

#用户授权
mysql> grant replication slave on *.* to 'root'@'%' identified by 'root';
Query OK, 0 rows affected, 1 warning (0.18 sec)
#从节点授权
mysql> grant all privileges on *.* to 'root'@'%' identified by 'root';
Query OK, 0 rows affected, 1 warning (0.09 sec)
#刷新缓存
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

1.1.4.查看mysql  master 状态

1主从同步-LMLPHP

1.2 SLAVE

1.2.1 配置   /ect/my.cnf

   #添加配置
   server-id = 2  #编号
   log-bin=mysql-bin #开启 binlog  可选择
   relay-log = mysql-relay-bin   #relay 同步日志
   replicate-wild-ignore-table=mysql.%  #忽略哪些表和库
   slave-skip-errors=all #跳过错误,同步  慎用

#跳过所有的错误,继续执行复制操作

1.2.2 重启服务

systemctl restart mysqld

1.2.3 配置master地址,同步

mysql> change master to master_host="10.3.1.210", #masterIP
                       master_port=3306, #master 端口
                       master_user='root', #master 用户
                       master_password='root', #master 密码
                       master_log_file='mysql-bin.000002', #master主库 bin日志名称
                       master_log_pos=2009;  #master主库 同步位置

mysql> start  slave;  #启动 slave 状态;
mysql> show slave status \G; #显示 slave状态   停止slave 为  stop slave  清除 slave 为 reset slave

重点关注标红字段都为yes可同步。

1主从同步-LMLPHP

同步错误处理,查看相关日志

1主从同步-LMLPHP

解决 Slave_SQL_Running: No

mysql> stop slave;
Query OK, 0 rows affected (0.01 sec)

mysql> SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1; START SLAVE;
Query OK, 0 rows affected (0.00 sec)
mysql> start slave; 

2.半同步复制

2.1 Master

#查看是否可以 同步加载
mysql> select @@have_dynamic_loading;
+------------------------+
| @@have_dynamic_loading |
+------------------------+
| YES                    |
+------------------------+
1 row in set (0.02 sec)

#安装插件 rpl_semi_sync_master
mysql> install plugin rpl_semi_sync_master  soname 'semisync_master.so';
Query OK, 0 rows affected (0.46 sec)

#查询相关 参数
mysql> show variables like '%semi%';
+-------------------------------------------+------------+
| Variable_name                             | Value      |
+-------------------------------------------+------------+
| rpl_semi_sync_master_enabled              | OFF        |
| rpl_semi_sync_master_timeout              | 10000      |
| rpl_semi_sync_master_trace_level          | 32         |
| rpl_semi_sync_master_wait_for_slave_count | 1          |
| rpl_semi_sync_master_wait_no_slave        | ON         |
| rpl_semi_sync_master_wait_point           | AFTER_SYNC |
+-------------------------------------------+------------+
6 rows in set (0.31 sec)
# 开启 半同步复制
mysql> set global rpl_semi_sync_master_enabled=1;
Query OK, 0 rows affected (0.09 sec)
#设置延时 1秒
mysql> set global rpl_semi_sync_master_timeout=1000;
Query OK, 0 rows affected (0.00 sec)

为了让mysql在重启时自动加载该功能,在/etc/my.cnf中加入:

rpl_semi_sync_master_enabled=1
rpl_semi_sync_master_timeout=1000 #1000为1000ms的超时时间。

2.2 slave

mysql> install plugin rpl_semi_sync_slave soname 'semisync_slave.so';
Query OK, 0 rows affected (1.00 sec)

mysql> show variables like '%semi%';
+---------------------------------+-------+
| Variable_name                   | Value |
+---------------------------------+-------+
| rpl_semi_sync_slave_enabled     | OFF   |
| rpl_semi_sync_slave_trace_level | 32    |
+---------------------------------+-------+
2 rows in set (0.80 sec)

mysql> set global rpl_semi_sync_slave_enabled=1;
Query OK, 0 rows affected (0.00 sec)

为了让mysql在重启时自动加载该功能,在/etc/my.cnf中加入:

rpl_semi_sync_slave_enabled=1

2.3 日志查看

master 中  /var/log/mysqld.log

1主从同步-LMLPHP

查看同步状态和节点

show global status like 'rpl%';

1主从同步-LMLPHP

04-16 15:39