MYSQL数据库主从复制的简单原理及实现方法

来源:互联网 发布:linux 压缩 编辑:程序博客网 时间:2024/05/22 23:40

1.主从复制的原理

blog.csdn.net/li_haijiang

      影响MySQL-A数据库的操作,在数据库执行后,都会写入本地的日志系统A中,通过网络实时的将日志系统中的数据库操作事件通过MySQL-A的3306端口,发送给了MySQL-B,然后写入本地的系统日志B中,然后将一条条数据库操作时间执行了。
      所以MySQL-A变化,MySQL-B也会跟着变化。


2.实现

2.1 安装环境
(一) 主从服务器的数据库的版本要求一致
(二) 服务器开启3306端口
(三) 知道数据库的密码

2.1 Master的配置
1.修改主数据库的配置文件/etc/my.cnf

[mysqld]log-bin=mysql-bin   //[必须]启用二进制日志server-id=1//[必须]服务器唯一ID,默认是1,一般取IP最后一段,这里看情况分配

2.然后重启mysql

service mysqld restart

3.进入mysql mysql -uroot -p 输入密码进入
4.赋予从库权限帐号,允许用户在主库上读取日志,赋予192.168.1.2也就是Slave机器有File权限,只赋予Slave机器有File权限还不行,还要给它REPLICATION SLAVE的权限才可以。

在Master数据库命令行中执行

//指定ipGRANT REPLICATION SLAVE ON *.* TO 'user'@'192.168.1.1' IDENTIFIED BY 'mysql';//所有ipmysql>GRANT REPLICATION SLAVE ON *.* to 'user'@'%' identified by 'mysql';

这里使用的用户作为同步的时候使用到的用户,可以自己设定。

5.重启mysql,登录mysql,显示主库信息

mysql> show master status;
mysql> show master status;+------------------+----------+--------------+------------------+-------------------+| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |+------------------+----------+--------------+------------------+-------------------+| mysql-bin.000003 |     1338 |              |                  |                   |+------------------+----------+--------------+------------------+-------------------+1 row in set (0.00 sec)

注:执行完此步骤后不要再操作主服务器MYSQL,防止主服务器状态值变化。
这里的 File 、Position 是在配置Salve的时候要使用到的

2.2 SLave的配置

1.修改alave数据库的配置文件

[mysqld]log-bin=mysql-bin   //[必须]启用二进制日志server-id=2//[必须]服务器唯一ID,默认是1,一般取IP最后一段,这里看情况分配

2.重启mysql服务 ,进入数据库,在命令行中执行

mysql>change master tomaster_host='x.x.x.x',               //master的主机ipmaster_user='user',                  //上面设置的执行同步的用户master_log_file='mysql-bin.000003',  //master file值master_log_pos=1201,                 //master Position的值。master_port=32768,                   //对外端口号,默认3306master_password='mysql';             //密码

然后开启数据库复制功能

myslq>start slave;

2.3 检查从服务器复制功能状态

mysql> show slave status\G
*************************** 1. row ***************************               Slave_IO_State: Waiting for master to send event                  Master_Host: 192.167.1.1                  Master_User: root                  Master_Port: 3306                Connect_Retry: 60              Master_Log_File: mysql-bin.000004          Read_Master_Log_Pos: 28125               Relay_Log_File: VM_128_194_centos-relay-bin.000004                Relay_Log_Pos: 26111        Relay_Master_Log_File: mysql-bin.000004             Slave_IO_Running: Yes            Slave_SQL_Running: Yes              Replicate_Do_DB: ufind_db          Replicate_Ignore_DB: mysql           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: 28125              Relay_Log_Space: 26296              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: 0Master_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: 2                  Master_UUID: 8ac3066a-9680-11e5-a2ec-5254007529fd             Master_Info_File: /data/mysqldb/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: 01 row in set (0.00 sec)ERROR: No query specified

这里的
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
必须为yes,如果不是,说明没有连接上.

2.4 主从服务器测试:

主服务器Mysql,建立数据库,并在这个库中建表插入一条数据:

mysql> create database li_haijiang;  Query OK, 1 row affected (0.00 sec)  mysql> use li_haijang;  Database changed  mysql>  create table haijiang(id int(3),name char(10));  Query OK, 0 rows affected (0.00 sec)  mysql> insert into haijiang values(1,'iloveyou');  Query OK, 1 row affected (0.00 sec)  mysql> show databases;   +--------------------+   | Database           |   +--------------------+   | information_schema |   | li_haijiang                |   | mysql                |   | test                 |   +--------------------+   4 rows in set (0.00 sec)

在从服务器中查询

从服务器Mysql查询:   mysql> show databases;   +--------------------+   | Database           |   +--------------------+   | information_schema |   | li_haijiang        |         | mysql              |   | test               |   +--------------------+   4 rows in set (0.00 sec)   mysql> use li_haijang   Database changed   mysql> select * from haijnag;           //查看主服务器上新增的具体数据   +------+----------+   | id   |    name  |   +------+----------+   |    1 | iloveyou |   +------+----------+   1 row in set (0.00 sec)

2.5 完成

编写一shell脚本,用nagios监控slave的两个yes(Slave_IO及Slave_SQL进程),如发现只有一个或没有yes,就表明主从有问题了,发短信警报吧。


顺颂商祺❤

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 贴吧邮箱忘了无法登陆怎么办 华为手机绑定了账号忘了怎么办 淘宝的手机多次注册无法登录怎么办 电脑看不到U盘里面的文件怎么办 c盘访问权限被锁了怎么办 xp系统电脑开机密码忘记了怎么办 华为荣耀9用久了卡怎么办 华为p9相机模糊敲打就正常怎么办 华为p9蓝频按什么都没反映怎么办 华为手机p9开机密码忘了怎么办 华为P9手机开机一直闪屏怎么办 荣耀畅玩7x用户数据锁定怎么办 华为手机p9的指纹解锁坏了怎么办 华为P9青春版外放音量小怎么办 华为麦芒5的开关键失灵怎么办 小米手机进水黑屏但是有声音怎么办 小米5手机突然黑屏没电怎么办 小米4开不了机怎么办充电没反应 小米手机充电没反应开不了机怎么办 红米note手机开不了机怎么办 红米手机突然黑屏开不了机怎么办 红米2a开不开机怎么办 红米4手开不了机怎么办 红米4a开不了机怎么办 魅族手机拨打电话时黑屏怎么办 金立手机拨打电话时黑屏怎么办 红米手机刷机黑屏了怎么办 酷派手机开机黑屏但能嗡嗡响怎么办 酷派手机忘记锁屏密码怎么办 酷派手机锁屏密码忘了怎么办 酷派手机不停的开机关机怎么办 苹果6手机进水了开不了机怎么办 金立手机突然黑屏开不了机怎么办 丢失手机又忘了ID锁怎么办? 小米2按出电话后黑屏怎么办 华为手机桌面拨号键没有了怎么办 华为荣耀5x黑屏后无法关机怎么办 华为手机突然黑屏电池充不了怎么办 华为手机恢复出厂设置后黑屏怎么办 华为荣耀畅玩6a内存不够怎么办 红米note4玩王者荣耀卡怎么办