MySQL主从

MySQL主从

1、MySQL主从介绍

MySQL主从又叫做Replication、AB复制。简单讲就是A和B两台机器做主从后,在A上写数据,另外一台B也会跟着写数据,两者数据实时同步的。

MySQL主从是基于binlog的,主上须开启binlog才能进行主从。

主从过程大致有3个步骤:

1)主将更改操作记录到binlog里

2)从将主的binlog事件(sql语句)同步到从本机上并记录在relaylog(中继日志)里

3)从根据relaylog里面的sql语句按顺序执行

2、MySQL主从原理

主服务器上有一个log dump线程,用来和从的I/O线程传递binlog;

从服务器上有两个线程,其中I/O线程用来同步主的binlog并生成relaylog,另外一个SQL线程用来把relaylog里面的sql语句落地。

3、MySQL主从配置

(1)主上操作
[root@antong ~]# vim /etc/my.cnf   //修改配置文件以下内容
log_bin = atlinux01
basedir = /usr/local/mysql
datadir = /data/mysql
port = 3306
server_id = 10
socket = /tmp/mysql.sock
[root@antong ~]# /etc/init.d/mysqld restart  //重启mysqld服务
Shutting down MySQL.. SUCCESS!
Starting MySQL.. SUCCESS!
[root@antong bin]# ls /data/mysql/   //生成了两个log_bin文件
antong.err  atlinux01.000001  auto.cnf  ib_logfile0  mysql               test
antong.pid  atlinux01.index   ibdata1   ib_logfile1  performance_schema
[root@antong ~]# cd /usr/local/mysql/bin/ //切换工作目录,可以自行配置环境变量
[root@antong bin]# ./mysqldump -uroot -p mysql > /tmp/mysql.sql  //备份
Enter password:    //输入你的密码
[root@antong bin]# ./mysql -uroot -e "create database at" -p //创建测试库
Enter password:   //输入密码
[root@antong bin]# ./mysql -uroot -p at < /tmp/mysql.sql   //备份的库恢复成新建的库
[root@antong bin]# ./mysql -uroot -p  //进入mysql
mysql> grant replication slave on *.* to ‘repl‘ @192.168.200.30 identified by ‘000000‘;  //赋予从服务器权限
Query OK, 0 rows affected (0.02 sec)
mysql> flush tables with read lock;   //把表锁住
Query OK, 0 rows affected (0.02 sec)
mysql> show master status;    //显示主机状态
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| atlinux01.000002 |      120 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

binlog-do-db= //仅同步指定的库

binlog-ignore-db= //忽略指定库

(2)从上操作
[root@antong ~]# vim /etc/my.cnf    //修改配置文件
basedir = /usr/local/mysql
datadir = /data/mysql
port = 3306
server_id = 30    //和主的id不能一样
socket = /tmp/mysql.sock
[root@antong ~]# /etc/init.d/mysqld restart
Shutting down MySQL.. SUCCESS!
Starting MySQL. SUCCESS!
[root@antong bin]# scp /tmp/mysql.sql root@192.168.200.30:/tmp/ //将主的备份文件传给从
[root@antong ~]# cd /usr/local/mysql/bin/   //进入bin目录
[root@antong bin]# ./mysql -uroot -p -e "create database at"  //创建和主一样的库
[root@antong bin]# ./mysql -uroot -p at < /tmp/mysql.sql //备份和主上的数据一样
Enter password:      //输入密码
[root@antong bin]# ./mysql -uroot -p
mysql> stop slave;    //关闭slave
mysql> change master to master_host=‘192.168.200.10‘,master_user=‘repl‘,master_password=‘000000‘,master_log_file=‘atlinux01.000002‘,master_log_pos=120; //注意这里pos一定要填主的Position
Query OK, 0 rows affected, 2 warnings (0.02 sec)
mysql> start slave;    //启动slave
Query OK, 0 rows affected (0.00 sec)
mysql> show slave status\G;   //查看连接状态
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.200.10
Master_User: repl
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: atlinux01.000002
Read_Master_Log_Pos: 120
Relay_Log_File: antong-relay-bin.000002
Relay_Log_Pos: 283
Relay_Master_Log_File: atlinux01.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: 457
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: 10
Master_UUID: 6c8995bb-e951-11eb-9ef3-000c2994a838
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)
ERROR:
No query specified
mysql> unlock tables;      //在主上解锁表
Query OK, 0 rows affected (0.01 sec)

replicate_do_db= //仅同步指定的库

replicate_ignore_db= //忽略指定库

replicate_do_table= /仅同步指定的表

replicate_ignore_table= //忽略指定表

replicate_wild_do_table= //某个库的某个表,如test.%, 支持通配符% 可以理解为库.表

replicate_wild_ignore_table=

(3)测试主从

主服务器上:

[root@antong bin]# ./mysql -uroot -p
mysql> use at;
Database changed
mysql> select count(*) from db;
+----------+
| count(*) |
+----------+
|        2 |
+----------+
1 row in set (0.00 sec)

从服务器上:

[root@antong bin]# ./mysql -uroot -p
mysql> use at;
Database changed
mysql> select count(*) from db;
+----------+
| count(*) |
+----------+
|        2 |
+----------+
1 row in set (0.00 sec)

在主服务器上删除表内容:

mysql> truncate table db;
Query OK, 0 rows affected (0.04 sec)
mysql> select count(*) from db;
+----------+
| count(*) |
+----------+
|        0 |
+----------+
1 row in set (0.01 sec)

在从服务器上查看:

mysql> select count(*) from db;  //查看后也被删掉了,说明同步成功
+----------+
| count(*) |
+----------+
|        0 |
+----------+
1 row in set (0.00 sec)

MySQL主从

原文:https://www.cnblogs.com/antong/p/15265580.html

以上是MySQL主从的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>