14-3 17 MySQL主从配置

MySQL主从配置

17.1 MySQL主从介绍

概念mysql

  • MySQL主从又叫作Replication、AB复制。
  • 假设A机器做为主Master,B机器做为从Slave。MySQL主从实现A,B数据实时同步
  • 基于binlog,主上须要开启

主从原理linux

  • A经过log dump线程与B的I/O线程通讯,使binlog与relaylog同步,relaylog再经过SQL线程将数据写入B。从而实现AB复制

  • A上写入数据——>数据变更记入binlog——>交给A上logdump线程——>交给B上I/O线程——>数据变更记入relaylog——>经过B上SQL线程——>数据写入B

场景:sql

  1. B做为备份
  2. B做为可读,减轻A访问压力

17.2 准备工做

  1. 安装MySQL wget tar mv 安装(./scripts/mysql_install_db --user= --datadir=)
  2. 配置my.cnf 配置服务脚本cp(support-file/mysql.server /etc/init.d/mysqld)
  3. 启动服务

MySQL启动异常,查看日志数据库

cd /data/mysql
less 主机名.err

...[ERROR]...Permission denied ... 
...[ERROR]...read-write mode
  • 常见错误:权限问题,可能因为innobackup恢复后变为root

17.3 配置主

A机器做为主,IP为10.1.1.8服务器

  • 主上配置主要有四步
    1. 开启主,加ID
    2. 准备库和同步用户
    3. 锁表,看主信息
    4. 作给B起始数据

第一步,开启主(binlog)less

[root@axiang-02 ~]# vi /etc/my.cnf,
[mysqld]下增长
server-id=8
log_bin=axianglinux1
[root@axiang-02 ~]# /etc/init.d/mysqld restart  //重启
[root@axiang-02 ~]# cd /data/mysql
[root@axiang-02 mysql]# ls -lt
总用量 176184
-rw-rw---- 1 mysql mysql       22 8月  30 15:01 axianglinux1.index  binlog索引,主从根本
-rw-rw---- 1 mysql mysql      120 8月  30 15:01 axianglinux1.000001 第一个二进制binlog文件

第二步:准备库和同步用户ide

参照blog库制做axiang用于测试测试

[root@axiang-02 mysql]# mysqldump -uroot -paxianglinux blog > /tmp/blog.sql
[root@axiang-02 mysql]# mysql -uroot -paxianglinux -e "create database axiang"
[root@axiang-02 mysql]# mysql -uroot -paxianglinux axiang < /tmp/blog.sql
[root@axiang-02 mysql]# ls -lt
总用量 176184
-rw-rw---- 1 mysql mysql      220 8月  30 15:08 axianglinux1.000001
drwx------ 2 mysql mysql       20 8月  30 15:08 axiang

建立用做同步数据的用户线程

[root@axiang-02 mysql]# mysql -uroot -paxianglinux
mysql> grant replication slave on *.* to 'repl'@'10.1.1.9' identified by 'axianglinux';

第三步,锁表并查看主信息rest

mysql> flush tables with read lock;  锁表
mysql> show master status;
+---------------------+----------+--------------+------------------+-------------------+
| File                | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+---------------------+----------+--------------+------------------+-------------------+
| axianglinux1.000001 |      425 |              |                  |                   |
+---------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

第四步,作给B起始数据

[root@axiang-02 mysql]# mysqldump -uroot -paxianglinux cms > /tmp/cms.sql
  • 同步axiang blog cms三个库,起始的数据要一致。
  • 能够经过mysqldump生成cms.sql blog.sql。复制给B机器

17.4 配置从

B机器做为从,IP为10.1.1.9

  • 从上配置主要有三步
    1. 加入ID
    2. 复制并同步A的起始数据
    3. 开启从

第一步,加入ID

[root@axiang-03 ~]# vi /etc/my.cnf
[mysqld]下加入
server-id=9  //不须要binlog,id不能与主同样,建议写IP末位

第二步,同步起始数据数据

[root@axiang-03 ~]# scp 10.1.1.8:/tmp/*.sql /tmp/  //远程复制过来
[root@axiang-03 ~]# mysql -uroot -paxianglinux

mysql> create database cms;
mysql> create database axiang;
mysql> create database blog;

[root@axiang-03 ~]# mysql -uroot -paxianglinux blog < /tmp/blog.sql 
[root@axiang-03 ~]# mysql -uroot -paxianglinux axiang < /tmp/blog.sql 
[root@axiang-03 ~]# mysql -uroot -paxianglinux cms < /tmp/cms.sql

第三步开启从

[root@axiang-03 ~]# mysql -uroot -paxianglinux
mysql> stop slave;
mysql> change master to master_host='10.1.1.8', master_user='repl', master_passwoord='axianglinux', master_log_file='axianglinux1.000001', master_log_pos=425;
mysql> start slave;
mysql> show slave status\G

  • 还要到主上执行 unlock tables

17.5 测试主从同步

指定主从范围

主服务器上
 binlog-do-db=      //仅同步指定的库
 binlog-ignore-db= //忽略指定库

主加入指定同步数据库

从服务器上
 replicate_do_db=
 replicate_ignore_db=
 replicate_do_table=
 replicate_ignore_table=
 replicate_wild_do_table=   //如aming.%, 支持通配符% 
 replicate_wild_ignore_table=
  • 通常使用最后两个replicate,由于前四个replicate匹配模糊,当选择了非监听库后,会忽略以后的操做。可能会致使数据丢失

测试结论

  • 开启主从后,若是起始数据不一致,对库,表,字段的操做。只要逻辑可行,则会保持主从同步的。好比主删除一个从上没有的用户,会致使主从断开。可是主添加新用户,删除两边都有的用户则能够同步
  • 从上只能进行查询操做。修改,添加会致使主从断开,须要按照新主状态show master status重新连接
相关文章
相关标签/搜索