17.1 MySQL主从介绍17.2 准备工作17.3 配置主17.4 配置从17.5 测试主从同步

- 17.1 MySQL主从介绍
- 17.2 准备工作
- 17.3 配置主
- 17.4 配置从
- 17.5 测试主从同步

# 17.1 MySQL主从介绍
-  MySQL主从又叫做Replication、AB复制。简单讲就是A和B两台机器做主从后,在A上写数据,另外一台B也会跟着写数据,两者数据实时同步的
-  MySQL主从是基于binlog的,主上须开启binlog才能进行主从。bilog,是二进制文件,无法cat
-  主从过程大致有3个步骤
1. 主将更改操作记录到binlog里
2. 从将主的binlog事件(sql语句)同步到从本机上并记录在relaylog里;relaylog,中继日志
3. 从根据relaylog里面的sql语句按顺序执行
-  主上有一个log dump线程,用来和从的I/O线程传递binlog
-  从上有两个线程,其中I/O线程用来同步主的binlog并生成relaylog,另外一个SQL线程用来把relaylog里面的sql语句落地
- mysql原理图

-  使用场景:
- 一、数据备份,主机器宕机,从机器还能随时对web提供服务
- 二、数据备份且可以分担主机器被调用数据时的压力,mysql主从,是有方向性的,写数据,必须从主机器开始;如果不依照原理会导致数据紊乱

# 17.2 准备工作

- 主从配置,主上操作
- mysql安装总结
- 进入src专用的下载目录下,下载mysql二进制免编译包
- wget 5.6版本,x64位
- 解压
- tar zxvf 。。。
- 移动
- mv 。。 /usr/local/mysql
- 移动时,需注意这个目录是否已经存在,如果存在了,需要删除旧文件
- 初始化配置
- 进入所在的mysql目录
```
[[email protected] mysql]# pwd
/usr/local/mysql
./scripts/mysql_install_db –user=mysql –datadir=/data/mysql
–user=mysql 需提前创建
```
- 编辑my.cnf文件(7版本的centos系统,就自带安装一个mariadb,所以就会自动生成有一个my.cnf,就省去了拷贝)
```
vim /etc/my.cnf   //添加以下两行内容
datadir=/data/mysql     
socket=/tmp/mysql.sock
```
- 拷贝启动脚本 cp support-files/mysql.server /etc/init.d/mysqld 
- 编辑启动脚本
vim /etc/init.d/mysqld //对以下两行进行指定路径
basedir=
datadir=
指定basedir的路径 /usr/local/mysql  
指定datadir的路径 /data/mysql

- 最重要的一步,记得查看/data/mysql 的默认属主、属组,如果不是mysql的,启东时会因为无法写入数据而不能启动

- chomd mysql:mysql /data/mysql

- 然后就可以尝试启动
/etc/init.d/mysql start

- [x] 主机器
- 192.168.202.131
- mysql启动情况
```
[[email protected] ~]# ps aux |grep mysql
root        941  0.0  0.1 115392  1688 ?        S    20:14   0:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/data/mysql --pid-file=/data/mysql/aming-01.pid
mysql      1347  1.3 45.3 1300816 452976 ?      Sl   20:14   0:02 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/data/mysql --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/data/mysql/aming-01.err --pid-file=/data/mysql/aming-01.pid --socket=/tmp/mysql.sock
root       2353  0.0  0.0 112684   980 pts/0    S+   20:17   0:00 grep --color=auto mysql
[[email protected] ~]# 
```
- [x] 从机器
- 192.168.202.132
- mysql启动情况
```
[[email protected] ~]# ps aux |grep mysql
root       1074  0.0  0.1 115392  1680 ?        S    20:15   0:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/data/mysql --pid-file=/data/mysql/aming-02.pid
mysql      1523  1.7 45.2 1300784 452076 ?      Sl   20:15   0:02 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/data/mysql --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/data/mysql/aming-02.err --pid-file=/data/mysql/aming-02.pid --socket=/tmp/mysql.sock
root       2284  0.0  0.0 112680   980 pts/0    S+   20:17   0:00 grep --color=auto mysql
[[email protected] ~]# 
```

# 17.3 配置主
-  安装mysql
-  修改my.cnf,增加server-id=131和log_bin=aminglinux1
-  修改完配置文件后,启动或者重启mysqld服务
-  把mysql库备份并恢复成aming库,作为测试数据
-  mysqldump -uroot mysql > /tmp/mysql.sql
-  mysql -uroot -e “create database aming”
-  mysql -uroot aming < /tmp/mysql.sql
-  创建用作同步数据的用户
-  grant replication slave on *.* to ‘repl‘@slave_ip identified by ‘password‘;
-  flush tables with read lock;
-  show master status;

- 修改主机器上的配置文件
```
[[email protected] ~]# vi /etc/my.cnf

[mysqld]
datadir=/data/mysql
socket=/tmp/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# Settings user and group are ignored when systemd is used.
# If you need to run mysqld under a different user or group,
# customize your systemd unit file for mariadb according to the
# instructions in http://fedoraproject.org/wiki/Systemd

[mysqld_safe]
#log-error=/var/log/mariadb/mariadb.log
#pid-file=/var/run/mariadb/mariadb.pid

#
# include all files from the config directory
#
#!includedir /etc/my.cnf.d

~                                                                               
~                                                                               
~                                                                               
~                                                                               
~                                                                               
~                                                                               
~                                                                               
~                                                                               
"/etc/my.cnf" 19L, 560C
```
- 更改为
```
[[email protected] ~]# vi /etc/my.cnf

[mysqld]
datadir=/data/mysql
socket=/tmp/mysql.sock
server-id=131
log_bin=aminglinux1
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# Settings user and group are ignored when systemd is used.
# If you need to run mysqld under a different user or group,
# customize your systemd unit file for mariadb according to the
# instructions in http://fedoraproject.org/wiki/Systemd

[mysqld_safe]
#log-error=/var/log/mariadb/mariadb.log
#pid-file=/var/run/mariadb/mariadb.pid

#
# include all files from the config directory
#
#!includedir /etc/my.cnf.d

~                                                                               
~                                                                               
~                                                                               
~                                                                               
~                                                                               
~                                                                               
:wq
```
- 修改之后要重启mysql,进入/data/mysql/目录下
```
[[email protected] ~]# /etc/init.d/mysqld restart
Shutting down MySQL.. SUCCESS! 
Starting MySQL.. SUCCESS! 
[[email protected] ~]# 

[[email protected] ~]# pwd
/root
[[email protected] ~]# cd /data/mysql
[[email protected] mysql]# ls -lt
总用量 110768
-rw-rw----. 1 mysql mysql 50331648 11月  7 21:44 ib_logfile0
-rw-rw----. 1 mysql mysql 12582912 11月  7 21:44 ibdata1
-rw-rw----. 1 mysql mysql    29700 11月  7 21:43 aming-01.err
-rw-rw----. 1 mysql mysql        5 11月  7 21:43 aming-01.pid
-rw-rw----. 1 mysql mysql       21 11月  7 21:43 aminglinux1.index
-rw-rw----. 1 mysql mysql      120 11月  7 21:43 aminglinux1.000001
drwx------. 2 mysql mysql     4096 11月  6 22:12 zrlog
-rw-rw----. 1 mysql mysql    44847 10月 31 22:02 localhost.err
drwx------. 2 mysql mysql     4096 10月 30 23:13 mysql2
-rw-rw----. 1 mysql mysql    15630 10月 25 23:10 www.qq123.com.err
-rw-rw----. 1 mysql mysql    49405 10月 24 23:57 localhost.localdomain.err
-rw-rw----. 1 mysql mysql       56 10月 14 20:44 auto.cnf
drwx------. 2 mysql mysql     4096 10月 14 20:31 mysql
drwx------. 2 mysql mysql     4096 10月 14 20:31 performance_schema
-rw-rw----. 1 mysql mysql 50331648 10月 14 20:31 ib_logfile1
drwx------. 2 mysql mysql        6 10月 14 20:31 test
[[email protected] mysql]# 

```
- .index  索引页,这个文件是必须要有的
- .000001 这个是二进制日志文件,会持续生成2、3、4等等(这个文件是实现主从配置的根本,没有这个文件根本没有办法实现)
- 第二步,准备一个数据,做演示用的,重新来搞一个数据出来,在blog基础上备份一个出来
```
[[email protected] mysql]# ls -lt
总用量 110768
-rw-rw----. 1 mysql mysql 50331648 11月  7 21:44 ib_logfile0
-rw-rw----. 1 mysql mysql 12582912 11月  7 21:44 ibdata1
-rw-rw----. 1 mysql mysql    29700 11月  7 21:43 aming-01.err
-rw-rw----. 1 mysql mysql        5 11月  7 21:43 aming-01.pid
-rw-rw----. 1 mysql mysql       21 11月  7 21:43 aminglinux1.index
-rw-rw----. 1 mysql mysql      120 11月  7 21:43 aminglinux1.000001
drwx------. 2 mysql mysql     4096 11月  6 22:12 zrlog
-rw-rw----. 1 mysql mysql    44847 10月 31 22:02 localhost.err
drwx------. 2 mysql mysql     4096 10月 30 23:13 mysql2
-rw-rw----. 1 mysql mysql    15630 10月 25 23:10 www.qq123.com.err
-rw-rw----. 1 mysql mysql    49405 10月 24 23:57 localhost.localdomain.err
-rw-rw----. 1 mysql mysql       56 10月 14 20:44 auto.cnf
drwx------. 2 mysql mysql     4096 10月 14 20:31 mysql
drwx------. 2 mysql mysql     4096 10月 14 20:31 performance_schema
-rw-rw----. 1 mysql mysql 50331648 10月 14 20:31 ib_logfile1
drwx------. 2 mysql mysql        6 10月 14 20:31 test
[[email protected] mysql]# mysqldump -uroot -paminglinux zrlog > /tmp/zrlog.sql
Warning: Using a password on the command line interface can be insecure.
[[email protected] mysql]# 
[[email protected] mysql]# du -sh /tmp/zrlog.sql
12K	/tmp/zrlog.sql
[[email protected] mysql]# 
```
- 新创建一个库,叫aming的库
```
[[email protected] mysql]# mysql -uroot -paminglinux -e "create database aming"
Warning: Using a password on the command line interface can be insecure.
[[email protected] mysql]# 
```
- 创建库之后还需要把这个数据恢复一下
```
[[email protected] mysql]# mysql -uroot -paminglinux aming < /tmp/zrlog.sql
Warning: Using a password on the command line interface can be insecure.
[[email protected] mysql]# 
```
- 现在要做的主从,参考的对象就是这个库 aming这个库
```
[[email protected] mysql]# ls -lt
总用量 225468
-rw-rw----. 1 mysql mysql 50331648 11月  7 21:56 ib_logfile0
-rw-rw----. 1 mysql mysql 79691776 11月  7 21:56 ibdata1
-rw-rw----. 1 mysql mysql    10543 11月  7 21:56 aminglinux1.000001
drwx------. 2 mysql mysql     4096 11月  7 21:56 aming
-rw-rw----. 1 mysql mysql    29700 11月  7 21:43 aming-01.err
-rw-rw----. 1 mysql mysql        5 11月  7 21:43 aming-01.pid
-rw-rw----. 1 mysql mysql       21 11月  7 21:43 aminglinux1.index
drwx------. 2 mysql mysql     4096 11月  6 22:12 zrlog
-rw-rw----. 1 mysql mysql    44847 10月 31 22:02 localhost.err
drwx------. 2 mysql mysql     4096 10月 30 23:13 mysql2
-rw-rw----. 1 mysql mysql    15630 10月 25 23:10 www.qq123.com.err
-rw-rw----. 1 mysql mysql    49405 10月 24 23:57 localhost.localdomain.err
-rw-rw----. 1 mysql mysql       56 10月 14 20:44 auto.cnf
drwx------. 2 mysql mysql     4096 10月 14 20:31 mysql
drwx------. 2 mysql mysql     4096 10月 14 20:31 performance_schema
-rw-rw----. 1 mysql mysql 50331648 10月 14 20:31 ib_logfile1
drwx------. 2 mysql mysql        6 10月 14 20:31 test
[[email protected] mysql]# 

```

- 先进入到mysql里面来
```
[[email protected] mysql]# mysql -uroot -paminglinux
Warning: Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 6
Server version: 5.6.36-log MySQL Community Server (GPL)

Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type ‘help;‘ or ‘\h‘ for help. Type ‘\c‘ to clear the current input statement.

mysql> 

```
- 创建用作同步数据的用户
```

mysql> grant replication slave on *.* to ‘repl‘@‘192.168.202.132‘ identified by ‘aminglinux111‘;
Query OK, 0 rows affected (0.00 sec)

mysql> 
```
- 不要忘记给它锁上,目的是不要再让它继续写了
- 锁表的目的是不让表继续写,因为一会需要做从机器配置,需要进行一个同步,让两台机器同步,保证两台机器的数据一致,同步才不会出错
```
mysql> flush tables with read lock;
Query OK, 0 rows affected (0.00 sec)

mysql> 
```
- 做一个show master status;
```
mysql> show master status;
+--------------------+----------+--------------+------------------+-------------------+
| File               | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+--------------------+----------+--------------+------------------+-------------------+
| aminglinux1.000001 |    10755 |              |                  |                   |
+--------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

mysql> 
mysql> quit
Bye
[[email protected] mysql]# 

```
- 需要记住binlog的filename,记住file 的位置,一会儿要用到它
- 一会儿要去从机器 上 同步这些库 (高亮的为库)
```
[[email protected] mysql]# ls
aming               aminglinux1.index  ib_logfile1                mysql2              zrlog
aming-01.err        auto.cnf           localhost.err              performance_schema
aming-01.pid        ibdata1            localhost.localdomain.err  test
aminglinux1.000001  ib_logfile0        mysql                      www.qq123.com.err
[[email protected] mysql]# 
[[email protected]-01 mysql]# ls /tmp/zrlog.sql
/tmp/zrlog.sql
[[email protected] mysql]# 

```
- 把这下面的库都做一个备份
```
[[email protected] mysql]# mysqldump -uroot -paminglinux mysql2 > /tmp/my2.sql
Warning: Using a password on the command line interface can be insecure.
[[email protected] mysql]# ls /tmp/*sql
/tmp/blog,sql  /tmp/blog.sql  /tmp/my2.sql  /tmp/zrlog.sql
[[email protected] mysql]# 
```

# 17.4 配置从
-  安装mysql,已经做了
-  查看my.cnf,配置server-id=132,要求和主不一样
-  修改完配置文件后,启动或者重启mysqld服务
-  把主上aming库同步到从上
-  可以先创建aming库,然后把主上的/tmp/mysql.sql拷贝到从上,然后导入aming库
-  mysql -uroot
-  stop slave;
-  change master to master_host=‘‘, master_user=‘repl‘, master_password=‘‘, master_log_file=‘‘, master_log_pos=xx,
-  start slave;
-  还要到主上执行 unlock tables

- 进入/etc/my.cnf
```
[[email protected] ~]# vi /etc/my.cnf

[mysqld]
datadir=/data/mysql
socket=/tmp/mysql.sock
server-id=132
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# Settings user and group are ignored when systemd is used.
# If you need to run mysqld under a different user or group,
# customize your systemd unit file for mariadb according to the
# instructions in http://fedoraproject.org/wiki/Systemd

[mysqld_safe]
#log-error=/var/log/mariadb/mariadb.log
#pid-file=/var/run/mariadb/mariadb.pid

#
# include all files from the config directory
#
#!includedir /etc/my.cnf.d

               
~                                                                                                            
:wq
```
- 重启服务
```
[[email protected] ~]# vi /etc/my.cnf
[[email protected] ~]# /etc/init.d/mysqld restart
Shutting down MySQL.. SUCCESS! 
Starting MySQL.. SUCCESS! 
[[email protected] ~]# ls /data/mysql
aming-02.err  aminglinux1.000001  auto.cnf  ib_logfile0  localhost.localdomain.err  mysql               test
aming-02.pid  aminglinux1.index   ibdata1   ib_logfile1  localhost.localdomain.pid  performance_schema
```
- 保证和主从机器上的库数据一致
把主机器上备份的数据,拷贝到从机器上,然后做一个数据恢复
```
[[email protected] ~]# scp 192.168.202.131:/tmp/*.sql /tmp/
[email protected]‘s password: 
blog.sql                                                                   100%  787     0.8KB/s   00:00    
my2.sql                                                                    100%  642KB 641.9KB/s   00:00    
zrlog.sql                                                                  100%   10KB   9.8KB/s   00:00    
[[email protected] ~]# 

[[email protected] ~]# mysql -uroot
-bash: mysql: 未找到命令

```
- 未找到命令,是因为没有把mysql命令加入到$PATH环境变量里面
- 为了方便使用mysql服务,将mysql目录、mysqldump加入到环境变量里,
```
[[email protected] ~]# alias ‘mysql=/usr/local/mysql/bin/mysql‘
[[email protected] ~]# alias ‘mysqldump=/usr/local/mysql/bin/mysqldump‘
[[email protected] ~]# 
```
- 进入mysql
```
[[email protected] ~]# mysql -uroot
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.6.36 MySQL Community Server (GPL)

Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type ‘help;‘ or ‘\h‘ for help. Type ‘\c‘ to clear the current input statement.

mysql> 
```
- 创建4个库
```
mysql> create database aming;
Query OK, 1 row affected (0.00 sec)

mysql> create database zrlog;
Query OK, 1 row affected (0.00 sec)

mysql> create database blog;
Query OK, 1 row affected (0.00 sec)

mysql> create database mysql2;
Query OK, 1 row affected (0.00 sec)

mysql> 

mysql> quit
Bye
[[email protected] ~]# 

```
- 做一个恢复
```
[[email protected] ~]# mysql -uroot zrlog < /tmp/zrlog.sql
[[email protected] ~]# mysql -uroot aming < /tmp/zrlog.sql
[[email protected] ~]# mysql -uroot mysql2 < /tmp/my2.sql
[[email protected] ~]# mysql -uroot blog  < /tmp/blog.sql
[[email protected] ~]# 
```
- 对比下俩边的文件
```
从上面
[[email protected] ~]# ls /data/mysql
aming         aminglinux1.000001  blog         ib_logfile1                mysql               test
aming-02.err  aminglinux1.index   ibdata1      localhost.localdomain.err  mysql2              zrlog
aming-02.pid  auto.cnf            ib_logfile0  localhost.localdomain.pid  performance_schema
[[email protected] ~]# 
主上面
[[email protected] mysql]# ls
aming               aminglinux1.index  ib_logfile0                mysql               www.qq123.com.err
aming-01.err        auto.cnf           ib_logfile1                mysql2              zrlog
aming-01.pid        blog               localhost.err              performance_schema
aminglinux1.000001  ibdata1            localhost.localdomain.err  test
[[email protected] mysql]# 

```
- 下面来实现主从
- 先进入mysql
```
[[email protected] ~]# mysql -uroot
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 6
Server version: 5.6.36 MySQL Community Server (GPL)

Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type ‘help;‘ or ‘\h‘ for help. Type ‘\c‘ to clear the current input statement.
```
- stop slave;
```
mysql> stop slave;
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> 
```
-
```
mysql> change master to master_host=‘192.168.202.131‘, master_user=‘repl‘, master_password=‘aminglinux111‘, master_log_file=‘aminglinux1.000001‘,master_log_pos=10755;
Query OK, 0 rows affected, 2 warnings (0.02 sec)

mysql> 

mysql> start slave;
Query OK, 0 rows affected (0.02 sec)

mysql> 
```
- 这个时候怎么判定主从有没有设置成功呢
```
mysql> start slave;
Query OK, 0 rows affected (0.02 sec)

mysql> show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.202.131
                  Master_User: repl
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: aminglinux1.000001
          Read_Master_Log_Pos: 10849
               Relay_Log_File: aming-02-relay-bin.000002
                Relay_Log_Pos: 285
        Relay_Master_Log_File: aminglinux1.000001
             Slave_IO_Running: Yes
            Slave_SQL_Running: No
              Replicate_Do_DB: 
          Replicate_Ignore_DB: 
           Replicate_Do_Table: 
       Replicate_Ignore_Table: 
      Replicate_Wild_Do_Table: 
  Replicate_Wild_Ignore_Table: 
                   Last_Errno: 1007
                   Last_Error: Error ‘Can‘t create database ‘blog‘; database exists‘ on query. Default database: ‘blog‘. Query: ‘create database blog‘
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 10755
              Relay_Log_Space: 555
              Until_Condition: None
               Until_Log_File: 
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File: 
           Master_SSL_CA_Path: 
              Master_SSL_Cert: 
            Master_SSL_Cipher: 
               Master_SSL_Key: 
        Seconds_Behind_Master: NULL
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error: 
               Last_SQL_Errno: 1007
               Last_SQL_Error: Error ‘Can‘t create database ‘blog‘; database exists‘ on query. Default database: ‘blog‘. Query: ‘create database blog‘
  Replicate_Ignore_Server_Ids: 
             Master_Server_Id: 131
                  Master_UUID: 69e8b25a-b0dd-11e7-997f-000c292e28f2
             Master_Info_File: /data/mysql/master.info
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL
      Slave_SQL_Running_State: 
           Master_Retry_Count: 86400
                  Master_Bind: 
      Last_IO_Error_Timestamp: 
     Last_SQL_Error_Timestamp: 171107 23:15:40
               Master_SSL_Crl: 
           Master_SSL_Crlpath: 
           Retrieved_Gtid_Set: 
            Executed_Gtid_Set: 
                Auto_Position: 0
1 row in set (0.00 sec)

mysql> 
```
-              Slave_IO_Running: Yes     这个很重要,其中一个是NO就表示主从已经端口
            Slave_SQL_Running: No       这个很重要,其中一个是NO就表示主从已经端口

- 这里Slave_SQL_Running: No,出错了,
- 解决办法
```
mysql> stop slave;
Query OK, 0 rows affected, 1 warning (0.00 sec)

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

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

mysql> show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.202.131
                  Master_User: repl
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: aminglinux1.000002
          Read_Master_Log_Pos: 120
               Relay_Log_File: aming-02-relay-bin.000007
                Relay_Log_Pos: 285
        Relay_Master_Log_File: aminglinux1.000002
             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: 
                   Last_Errno: 0
                   Last_Error: 
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 120
              Relay_Log_Space: 626
              Until_Condition: None
               Until_Log_File: 
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File: 
           Master_SSL_CA_Path: 
              Master_SSL_Cert: 
            Master_SSL_Cipher: 
               Master_SSL_Key: 
        Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error: 
               Last_SQL_Errno: 0
               Last_SQL_Error: 
  Replicate_Ignore_Server_Ids: 
             Master_Server_Id: 131
                  Master_UUID: 69e8b25a-b0dd-11e7-997f-000c292e28f2
             Master_Info_File: /data/mysql/master.info
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL
      Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it
           Master_Retry_Count: 86400
                  Master_Bind: 
      Last_IO_Error_Timestamp: 
     Last_SQL_Error_Timestamp: 
               Master_SSL_Crl: 
           Master_SSL_Crlpath: 
           Retrieved_Gtid_Set: 
            Executed_Gtid_Set: 
                Auto_Position: 0
1 row in set (0.00 sec)

mysql> 

```

- 恢复主机器上的表的写操作
unlock tables
```
mysql> unlock tables;
Query OK, 0 rows affected (0.00 sec)

mysql> 
```

- 到此,主从就算搭建完了

# 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=   //如aming.%, 支持通配符%  指定同步靠谱的匹配  忽略表    常用
- 测试
主上进入mysql
切换到aming库
```
mysql> use aming;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> 
```
- 查看表
```
mysql> show tables;
+-----------------+
| Tables_in_aming |
+-----------------+
| comment         |
| link            |
| log             |
| lognav          |
| plugin          |
| tag             |
| type            |
| user            |
| website         |
+-----------------+
9 rows in set (0.00 sec)

mysql> select count(*) user;
+------+
| user |
+------+
|    1 |
+------+
1 row in set (0.00 sec)

mysql> 
```
- 再切换到从服务器上
```
mysql> use aming;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> select count(*) user;
+------+
| user |
+------+
|    1 |
+------+
1 row in set (0.00 sec)

mysql> 
```
- 也是一样的,数据是一致的
- 现在要把tag表做一个删除操作
```
mysql> truncate table tag;
Query OK, 0 rows affected (0.03 sec)

mysql> select count(*) tag;
+-----+
| tag |
+-----+
|   1 |
+-----+
1 row in set (0.00 sec)

mysql> 
mysql> select * from tag;
Empty set (0.00 sec)

mysql> 
```
- 再去从上看下
```
mysql> select count(*) tag;
+-----+
| tag |
+-----+
|   1 |
+-----+
1 row in set (0.00 sec)

mysql> select * from tag;
Empty set (0.00 sec)

mysql> 
```
- 下面做一个操作,把表直接给删掉
```
mysql> show tables;
+-----------------+
| Tables_in_aming |
+-----------------+
| comment         |
| link            |
| log             |
| lognav          |
| plugin          |
| tag             |
| type            |
| user            |
| website         |
+-----------------+
9 rows in set (0.00 sec)

mysql> drop table tag;
Query OK, 0 rows affected (0.03 sec)

mysql> 

```
- 再去从上看
```
mysql> select * from tag;
ERROR 1146 (42S02): Table ‘aming.tag‘ doesn‘t exist
mysql> 
```
- 这就是主从同步
- 再来做个删除aming库
- 先去主上
```
mysql> drop database aming;
Query OK, 8 rows affected (0.15 sec)

mysql> 
```
- 再去从上看,没有aming库了
```
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| blog               |
| mysql              |
| mysql2             |
| performance_schema |
| test               |
| zrlog              |
+--------------------+
7 rows in set (0.00 sec)

mysql> 
```
- [x] 因为意外在从机器上做了意外的删除,新增,更改操作,就可以可能导致“Slave_SQL_Running: NO”
- 如果出现了“Slave_SQL_Running: NO ” 需要去主上面,重新做一个“change master”的操作 比对主机器上的“master_log_pos=10755”,就可以恢复了
- 操作前需要先sotp slave
- 然后再
- change master to master_host=’192.168.133.131′, master_user=’repl’, master_password=’aminglinux’,master_log_file=’Master.000001′, master_log_pos=10911;
时间: 2024-10-14 09:26:08

17.1 MySQL主从介绍17.2 准备工作17.3 配置主17.4 配置从17.5 测试主从同步的相关文章

8.31 MySQL主从配置、准备工作、配置主、配置从、测试主从同步

1.MySQL主从配置  MySQL主从又叫做Replication.AB复制.简单讲就是A和B两台机器做主从后,在A上写数据,另外一台B也会跟着写数据,两者数据是实时同步的 MySQL主从是基于binlog的,主上须开启binlog才能进行主从. 主从过程大致有3个步骤 1)主将更改操作记录到binlog里 2)从将主的binlog事件(sql语句)同步到从本机上并记录在relaylog里 3)从根据relaylog里面的sql语句按顺序执行 主上有一个log dump线程,用来和从的I/O线

17.1 MySQL主从介绍;17.2 准备工作;17.3 配置主;17.4 配置从;17.5 测试主从同步

17.1 MySQL主从介绍 1. MySQL主从又叫做Replication.AB复制.简单讲就是A和B两台机器做主从后,在A上写数据,另外一台B也会跟着写数据,两者数据实时同步的 2. MySQL主从是基于binlog的,主上须开启binlog才能进行主从. 3. 主从过程大致有3个步骤 1)主将更改操作记录到binlog里 2)从将主的binlog事件(sql语句)同步到从本机上并记录在relaylog里 3)从根据relaylog里面的sql语句按顺序执行 4. 主上有一个log dum

17.1 MySQL主从介绍 17.2 准备工作 17.3 配置主 17.4 配置从 17.5 测试

17.1 MySQL主从介绍 17.2 准备工作 17.3 配置主 17.4 配置从 17.5 测试主从同步 原文地址:http://blog.51cto.com/13227377/2141755

MySQL主从介绍、准备工作、准备工作、配置从、测试主从同步

17.1 MySQL主从介绍 MySQL主从又叫做Replication.AB复制.简单讲就是A和B两台机器做主从后,在A上写数据,另外一台B也会跟着写数据,两者数据实时同步: MySQL主从是基于binlog的,主上须开启binlog才能进行主从. 主从过程大致有3个步骤 主将更改操作记录到binlog里 从将主的binlog事件(sql语句)同步到从本机上并记录在relaylog里 从根据relaylog里面的sql语句按顺序执行 主上有一个log dump线程,用来和从的I/O线程传递bi

PHP 17: MySQL的简单介绍

原文:PHP 17: MySQL的简单介绍 这一章将简单介绍MySQL的基本知识. 本文来自http://lib.hackbase.com/html/8/35125.htm. MySQL是最受欢迎的开源SQL数据库管理系统,它由MySQL AB开发.发布和支持.MySQL AB是一家基于MySQL开发人员的商业公司,它是一家使用了一种成功的商业模式来结合开源价值和方法论的第二代开源公司.MySQL是MySQL AB的注册商标. MySQL是一个快速的.多线程.多用户和健壮的SQL数据库服务器.M

MySQL主从介绍、准备工作、配置主、配置从、测试主从同步

MySQL主从介绍 MySQL主从又叫做Replication.AB复制.简单讲就是A和B两台机器做主从后,在A上写数据,另外一台B也会跟着写数据,两者数据实时同步.MySQL主从是基于binlog的,主上须开启binlog才能进行主从. 主从过程: 需要保持数据的一致性,才能复制数据 1.主服务器将更改操作记录到binlog中 2.从服务器将主服务器的binlog事件(SQL语句)同步到本机(从服务器)并记录在relaylog(中继日志)中 3.从服务器根据relaylog里面的SQL语句按顺

mysql主从介绍,准备工作,主配置,从配置,主从测试

主从介绍 MySQL主从又叫做Replication.AB复制.简单讲就是A和B两台机器做主从后,在A上写数据,另外一台B也会跟着写数据,两者数据实时同步. MySQL主从是基于binlog的,主上须开启binlog才能进行主从. 主从过程三个步骤 主将更改操作记录到binlog中 从将主的binlog事件(SQL语句)同步到本机并记录在relaylog中 从根据relaylog里面的SQL语句按顺序执行 该过程有三个线程,主上有一个logdump线程,用来和从的i/o线程传递binlog:从上

MySQL主从(介绍,配置主机,配置从机,测试主从同步)

一.介绍及准备工作 1.介绍 MySQL主从配置又叫Replication或者AB复制,简单讲就是A和B两台机器做主从后,在A上写数据,另一台B也会跟着写数据,两台数据实时同步. MySQL主从是基于binlog的,主上须开启binlog才能进行主从. 主从过程大致有3个步骤 主将更改操作记录到Binlog里 从将主的Binlog事件(sql语句)同步到从本机上并记录在relaylog里 从根据relaylog里面的sql语句按顺序执行 主上有一个logdump线程,用来和从的i/o线程传递bi

MySQL主从配置:主从介绍、配置主和从 、测试主从同步

MySQL主从介绍 (两台机器数据同步) 主:-->binlog 从:-->relaylog 主上有一个log dump线程,用来和从的I/O线程传递binlog 从上有两个线程,其中I/O线程用来同步主的binlog并生成relaylog,另外一个SQL线程用来把relaylog里面的sql语句落地(执行) 主从的应用场景: (1)做数据的备份,(主:作读写数据,从:实时同步,当 主 宕机时,从 也可以即使提供服务 ) (2)也是做备份.(客户从 从 这台机器上读取数据(但是不能再从上写),