mysql互为主从配置

时间:2022-09-21 23:31:24


一、MYSQL主从备份的原理

            mysql支持单向、异步复制,在复制的过程中,一个为主服务器,另一个为从服务器。主服务器进行的操作sql 操作都会记录到 bin-log 指定的文件中,如果没有指定,一般为mysql-bin.0000XX文件中。从服务器会将主服务器更新的日志复制到从服务器,然后在从服务器顺序做sql 操作,所以主服务的二进制日志必须开启。              从服务器从主服务器备份不会干扰主服务器。
          

二、复制过程三部曲

         1. Salve 启动I/O进程连接Master,请求Master指定日志文件的指定位置或者最开始位置之后的日志。
          2. Master接到请求以后,负责复制的I/O进程将日志名称、更新日志的位置,日志的内容传输到Salve.
          3. Salve讲读取到的日志的内容追加到rely-log文件中,而把读取到的日志名称、更新日志的位置写到master-info文件中,以便下次读取的时候告诉主服务器从日志文件的什么位置开始读取。               Salve将日志内容中的sql 操作在自己的服务器上相同的执行一遍。

三、实例配置

1. mysql 版本最好相同。
A :    192.168.0.103    linux     x86_64   mysql B :    192.168.0.107    linux     x86_64   mysql 两台机器均启动mysql.
2. 关闭防火墙iptables ,这样可以使得两台机器的mysql相互交互。
3.创建mysql用户&配合mysql配置文件my.cnf(最好两台机器的用户名称相同) 
 在192.168.0.103 : useradd  replication  在192.168.0.107 : useradd  replication
配置my.cnf    192.168.0.103
[mysqld]
log-bin=mysql-binserver-id = 1binlog-do-db=testbinlog-ignore-db=mysql

log-bin : 表示开启bin-log日志功能,这样I/O才会将日志复制到从机的rely-log中。server-id : 表示服务器的ID,此为唯一机器标识。binlog-do-db : 标识对指定数据库做日志记录,如果对多个数据库做日志记录,需加','分隔。binlog-ignore-db : 标识不对指定数据库做日志记录。
192.168.0.107
mysqld
log-bin=mysql-bin
server-id = 2
binlog-do-db=test
binlog-ignore-db=mysql

4.授予从机用户同步日志的权限。

  grant replication slave on *.* to 'replication'@'192.168.0.107' identified by 'replication'
*************************** 1. row ***************************
Host: 192.168.0.107
User: replication
Password: *D36660B5249B066D7AC5A1A14CECB71D36944CBC
Select_priv: N
Insert_priv: N
Update_priv: N
Delete_priv: N
Create_priv: N
Drop_priv: N
Reload_priv: N
Shutdown_priv: N
Process_priv: N
File_priv: N
Grant_priv: N
References_priv: N
Index_priv: N
Alter_priv: N
Show_db_priv: N
Super_priv: N
Create_tmp_table_priv: N
Lock_tables_priv: N
Execute_priv: N
Repl_slave_priv: Y
Repl_client_priv: N
Create_view_priv: N
Show_view_priv: N
Create_routine_priv: N
Alter_routine_priv: N
Create_user_priv: N
Event_priv: N
Trigger_priv: N
ssl_type:
ssl_cipher:
x509_issuer:
x509_subject:
max_questions: 0
max_updates: 0
max_connections: 0
max_user_connections: 0
1 row in set (0.00 sec)

5.授予主机同步从机日志的权限(see #4)(在从机192.168.0.107上操作)
*************************** 1. row ***************************
Host: 192.168.0.103
User: replication
Password: *D36660B5249B066D7AC5A1A14CECB71D36944CBC
Select_priv: N
Insert_priv: N
Update_priv: N
Delete_priv: N
Create_priv: N
Drop_priv: N
Reload_priv: N
Shutdown_priv: N
Process_priv: N
File_priv: N
Grant_priv: N
References_priv: N
Index_priv: N
Alter_priv: N
Show_db_priv: N
Super_priv: N
Create_tmp_table_priv: N
Lock_tables_priv: N
Execute_priv: N
Repl_slave_priv: Y
Repl_client_priv: N
Create_view_priv: N
Show_view_priv: N
Create_routine_priv: N
Alter_routine_priv: N
Create_user_priv: N
Event_priv: N
Trigger_priv: N
ssl_type:
ssl_cipher:
x509_issuer:
x509_subject:
max_questions: 0
max_updates: 0
max_connections: 0
max_user_connections: 0
1 row in set (0.00 sec)
接下里就可以用:
  在192.168.0.103 :     mysql -h 192.168.0.107 -u replication -p   连接192.168.0.107上的mysql ,进行同步test 库中的表,pleae see test below:
For status now;
192.168.0.103
mysql> select * from EM;
Empty set (0.00 sec)

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

insert data on test.EM in IP 192.168.0.103
mysql> insert into EM values (22,'Kevin'); 
Query OK, 1 row affected (0.00 sec)

mysql> select * from EM;
+------+-------+
| a | b |
+------+-------+
| 22 | Kevin |
+------+-------+
1 row in set (0.00 sec)

you can see content in test.EM is similar to content on content in 192.168.0.103
mysql> select * from EM;
+------+-------+
| a | b |
+------+-------+
| 22 | Kevin |
+------+-------+
1 row in set (0.00 sec)