27 mysql 3(Mysql 主从配置)

17.1 MySQL主从介绍

Replication 实时同步

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

17.2 准备工作

1. 在两个centos系统上安装mysql,安装方法见 :

2. hao1机器和hao2机器都启动mysql :

3. 两个centos系统:设定hao1为主  hao2为从 :

hao1查看是否启动mysql :[root@hao-01 ~]# ps aux |grep mysql

clipboard.png

hao2查看是否启动mysql :[root@hao-02 ~]# ps aux |grep mysql

clipboard.png

17.3 配置主

1. 编辑/etc/my.cnf配置文件 :[root@hao-01 ~]# vim /etc/my.cnf    # 添加内容 :

扫描二维码关注公众号,回复: 3991911 查看本文章

server-id=130   #添加这行,id=128是获取到的ip地址
log_bin=pyzc001  #服务器设定的名称

[mysqld]
server-id=130
log_bin=pyzc001
datadir=/data/mysql
socket=/tmp/mysql.sock
symbolic-links=0

2. 重启mysql :[root@hao-01 ~]# /etc/init.d/mysqld restart

3. 查看/data/mysql/目录下,生成以(log_bin)pyzc001开头的文件 :[root@hao-01 ~]# ls /data/mysql/pyzc001.*

clipboard.png

4. 进入 /data/mysql/目录 :[root@hao-01 ~]# cd /data/mysql/

5. 创建一个新的库,库名为pyzctest001

[root@hao-01 mysql]# mysql -uroot -pmima1 -e "CREATE DATABASE pyzctest001;"  #把ceshiku库备份并恢复成haozc库,作为测试数据

6. 备份mysql数据库,做测试 :[root@hao-01 mysql]# mysqldump -uroot -pmima1 pyzctest001 > /tmp/pyzctest001.sql

7. 把备份的ceshiku.sql库文件,恢复到haozc库 :[root@hao-01 mysql]# mysql -uroot -phaomima haozc < /tmp/ceshiku.sql

或创建新库新表如下:

[root@pyzc001 mysql]# mysql -uroot -p
Enter password: 
Welcome to the MySQL monitor.....
mysql> set password=PASSWORD('mima1');
Query OK, 0 rows affected (0.00 sec)
mysql> CREATE DATABASE pyzctest001;
Query OK, 1 row affected (0.01 sec)
mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| pyzctest001        |
| test               |
+--------------------+
5 rows in set (0.02 sec)
mysql> CREATE DATABASE IF NOT EXISTS my_db default charset utf8 COLLATE utf8_general_ci; 
Query OK, 1 row affected (0.01 sec)
mysql> CREATE TABLE 主从复制01 (姓名 VARCHAR(20), 属性 CHAR(1));
Query OK, 0 rows affected (0.07 sec)
mysql> INSERT INTO 主从复制01 VALUES ("panyu","M");
Query OK, 1 row affected (0.04 sec)
mysql> INSERT INTO 主从复制01 VALUES ("lingling","W");
Query OK, 1 row affected (0.01 sec)
mysql> INSERT INTO 主从复制01 VALUES ("panhunuo","c");
Query OK, 1 row affected (0.01 sec)
mysql> SHOW COLUMNS FROM 主从复制01;
+--------+-------------+------+-----+---------+-------+
| Field  | Type        | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| 姓名   | varchar(20) | YES  |     | NULL    |       |
| 属性   | char(1)     | YES  |     | NULL    |       |
+--------+-------------+------+-----+---------+-------+
2 rows in set (0.02 sec)

8. hao1机器主  所有mysql数据库备份到/tmp/下 :

clipboard.png

[root@hao-01 mysql]# mysqldump -uroot -pmima1 pyzctest001 > /tmp/pyzctest001.sql

9. 进入mysql(root用户下):[root@hao-01 mysql]# mysql -uroot -pmima1

10. 创建repl用户,针对ip是hao2从ip :mysql> grant replication slave on *.* to 'repl'@'192.168.106.131' identified by 'mima2';

11. 表状态锁上,暂时不能再写入数据 :mysql> flush tables with read lock;

12. 查看红框中两个数值,hao2机器从上需要用这两个数值 :mysql> show master status;

mysql> grant replication slave on *.* to 'repl'@'192.168.106.131' identified by 'mima2';  
Query OK, 0 rows affected (0.01 sec)
mysql> flush tables with read lock;
Query OK, 0 rows affected (0.04 sec)
mysql> show master status;
+----------------+----------+--------------+------------------+-------------------+
| File           | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+----------------+----------+--------------+------------------+-------------------+
| pyzc001.000006 |      120 |              |                  |                   |
+----------------+----------+--------------+------------------+-------------------+
1 row in set (0.01 sec)

17.4 配置从

1. 编辑/etc/my.cnf配置文件 :[root@hao-02 ~]# vim /etc/my.cnf   #添加内容:

server-id=131

clipboard.png

2. 重启mysql :[root@hao-02 ~]# /etc/init.d/mysqld restart  #service mysql restart

3. 用scp命令复制hao1主/tmp/下所有以.sql备份的mysql数据库文件,粘贴到本机hao2从的/tmp/目录下 :
[root@hao-02 ~]# scp 192.168.106.130:/tmp/*.sql /tmp/   # yum install -y openssh-clients 可以使用scp

[root@pyzc002 tmp]# scp 192.168.106.130:/tmp/*.sql /tmp/
[email protected]'s password: 
pyzctest001.sql                                       100% 1961   331.0KB/s   00:00 

4. 如果执行找不到mysql -uroot命令,执行下面命令 :
[root@hao-02 ~]# alias 'mysql=/usr/local/mysql/bin/mysql'
[root@hao-02 ~]# alias 'mysqldump=/usr/local/mysql/bin/mysqldump'
[root@hao-02 ~]# ln -s /usr/local/mysql/bin/mysql  /usr/bin

5. 登录mysql(登录root用户) :[root@hao-02 ~]# mysql -uroot

6. hao2从上创建和hao1主一样的mysql用户haozc :
mysql> create database pyzctest001;

7. 把hao1机器从 同步的.sql 库文件,恢复到创建对应名称库下 :
[root@hao-02 mysql]# mysql -uroot pyzctest001 < /tmp/pyzctest001.sql

8. 登录mysql,执行下面命令 :

(master_password='mima2', master_log_file='pyzc001.000003',见17.3章12节查看 )

[root@hao-02 ~]# mysql -uroot
mysql> use pyzctest001;
mysql> stop slave;
mysql> change master to master_host='192.168.106.130',master_user='repl', master_password='mima2', master_log_file='pyzc001.000006', master_log_pos=120;
mysql> start slave;

mysql> change master to master_host='192.168.106.130',master_user='repl',master_password='mima2',master_log_file='pyzc001.000003',master_log_pos=1822;
Query OK, 0 rows affected, 2 warnings (0.07 sec)

9. 查看主从配置是否成功 ?mysql> show slave status\G #两个都是Yes才成功

clipboard.png

10. 在hao1机器主上,把之前锁定的表解锁(恢复写入的操作) :[root@hao-01 ~]# mysql -uroot -pmima1

mysql> unlock tables;

17.5 测试主从同步

配置参数

1. 主服务器上 :
binlog-do-db=      //仅同步指定的库(其他库不同步)
binlog-ignore-db= //忽略指定库(其他库都同步)

2. 从服务器上 :
replicate_do_db=   //(不常用)
replicate_ignore_db=   //(不常用)
replicate_do_table=   //(不常用)
replicate_ignore_table=   //(不常用)
replicate_wild_do_table=   //如aming.%, (支持通配符%)
replicate_wild_ignore_table=

测试主从:

1. hao1机器主上操作 :[root@hao-01 ~]# mysql -uroot -pmima1
切换数据库 :mysql> use pyzctest001;
查看数据库下所有表 :mysql> show tables;

2. hao2机器从上操作 :
[root@hao-02 ~]# mysql -uroot
切换数据库 :mysql> use pyzctest001;
查看数据库下所有表 :mysql> show tables;

clipboard.png

3. hao1机器主 删除表(删除表结构,慎重使用):mysql> drop table biao1;

4. hao2机器从 查看所有表,是否还有主上删除的表 ?mysql> show tables;

注意:到主从不能正常同步,提示uuid相同的错误。这是因为克隆机器导致。https://www.2cto.com/database/201412/364479.html


mysql> use pyzctest001;
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> show tables;
+-----------------------+
| Tables_in_pyzctest001 |
+-----------------------+
| 主从复制01            |
+-----------------------+
1 row in set (0.04 sec)
mysql> describe 主从复制01;
+--------+-------------+------+-----+---------+-------+
| Field  | Type        | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| 姓名   | varchar(20) | YES  |     | NULL    |       |
| 属性   | char(1)     | YES  |     | NULL    |       |
+--------+-------------+------+-----+---------+-------+
2 rows in set (0.06 sec)
mysql> insert into 主从复制01 (姓名,属性)
    -> values ('test','t');
Query OK, 1 row affected (0.19 sec)
mysql> select * from 主从复制01;
+----------+--------+
| 姓名     | 属性   |
+----------+--------+
| panyu    | M      |
| lingling | W      |
| panhunuo | c      |
| test     | t      |
| test01   | t      |
| test02   | t      |
| test04   | t      |
| test03   | q      |
+----------+--------+
8 rows in set (0.01 sec)
mysql> insert into 主从复制01 (姓名,属性) values ('test55','i');
Query OK, 1 row affected (0.03 sec)


mysql> use pyzctest001;
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 * from 主从复制01;
+----------+--------+
| 姓名     | 属性   |
+----------+--------+
| panyu    | M      |
| lingling | W      |
| panhunuo | c      |
| test     | t      |
| test01   | t      |
| test02   | t      |
| test04   | t      |
| test03   | q      |
| test55   | i      |
+----------+--------+
9 rows in set (0.01 sec)

猜你喜欢

转载自blog.csdn.net/xiaoyuerp/article/details/83059450