MySQL主从复制原理及搭建

来源:互联网 发布:香水时代的淘宝店怎么 编辑:程序博客网 时间:2024/06/13 01:23

一、MySQL主从复制原理

mysql支持单向、异步复制,复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器。mysql复制基于主服务器在二进制日志中跟踪所有对数据库的更改(更新、删除等等)。因此,要进行复制,必须在主服务器上启用二进制日志。每个从服务器从主服务器接收主服务器已经记录到其二进制日志的保存的更新。当一个从服务器连接主服务器时,它通知主服务器从服务器在日志中读取的最后一次成功更新的位置。从服务器接收从那时起发生的任何更新,并在本机上执行相同的更新。然后封锁并等待主服务器通知新的更新。从服务器执行备份不会干扰主服务器,在备份过程中主服务器可以继续处理更新。

二、MySQL主从复制搭建

一.工作环境及条件

主数据库:172.25.0.254从数据库:172.25.0.11操作系统:RHRL7MySQL版本:mariadb-5.5.35
安装MYSQL(yum源安装)
主数据库
[root@master ~]# yum clean all[root@master ~]# yum -y install mariadb*
从数据库
[root@slave ~]# yum clean all
开启mariadb服务
[root@master ~]# systemctl start mariadb [root@slave ~]# systemctl start mariadb
关闭防火墙(或者开发防火墙的mysql服务和3306端口)
[root@master ~]# systemctl stop firewalld.service [root@slave ~]# systemctl stop firewalld.service 

二.mysql主从复制配置方法
1.主数据库
修改主库my.cnf主要设置个不一样的ID,以及同步的数据库的名字和端口号(默认为3306)
[root@slave ~]# vim /etc/my.cnf        在[mysqld]中加入内容如下server-id=1log-bin=lhbport=3306

重启服务使配置生效

[root@master ~]# systemctl restart mariadb
设置mysql登录密码(默认情况下登录密码为空)
[root@master ~]# mysqladmin -uroot password '123456'
登录主库赋予从库权限账号,允许用户在主库上读取日志(用户名:admin,密码:123456)
[root@master ~]# mysql -uroot -p123456
进入mysql里面输入
MariaDB [(none)]> grant replication slave on *.* to 'admin'@'172.25.0.254' identified by '123456';
为验证账号我们可以在从的机器上用命令作如下测试
[root@slave ~]# mysql -uadmin -p123456 -h 172.25.0.11
显示主数据看的信息
MariaDB [(none)]> show master status;+------------+----------+--------------+------------------+| File       | Position | Binlog_Do_DB | Binlog_Ignore_DB |+------------+----------+--------------+------------------+| lhb.000001 |      537 |              |                  |+------------+----------+--------------+------------------+1 row in set (0.00 sec)(记录File、Position的值,设置从数据库的时候会用到)

2.从数据库

修改从数据库的my.cnf,在[mysqld]如下:
server-id=2
重启下数据库
[root@slave ~]# systemctl restart mariadb

设置mysql登录密码(默认情况下登录密码为空)

[root@slave ~]# mysqladmin -uroot password '123456'
登录数据库
[root@slave ~]# mysql -uroot -p123456
在从数据库上设置同步
MariaDB [(none)]> slave stop;Query OK, 0 rows affected, 1 warning (0.00 sec)MariaDB [(none)]> change master to master_host='172.25.0.11',master_user='admin',master_password='123456',master_log_file='lhb.000001',master_log_pos=537;Query OK, 0 rows affected (0.03 sec)这里的lhb.000001和537为主数据库的master status)MariaDB [(none)]> slave start;Query MariaDB [(none)]> show slave status\G;
看到以下两行为Yes,表示成功了
Slave_IO_Running: YesSlave_SQL_Running: Yes

假如你的Slave_IO_Running:Connecting或者No
那么可能出现以下几点问题:
1.主从两个数据库不通。2.server-id设置错误。3.position设置错误。4.防火墙没关闭或者没开放mysql端口。

3.测试
在主数据库上新建数据库,看看是否会同步。
主数据库上:
MariaDB [(none)]> show databases;+--------------------+| Database           |+--------------------+| information_schema || mysql              || performance_schema || test               |+--------------------+4 rows in set (0.01 sec)

从数据库上:
MariaDB [(none)]> show databases;+--------------------+| Database           |+--------------------+| information_schema || mysql              | | performance_schema || test               |+--------------------+4 rows in set (0.01 sec)

主数据库上创建数据库并查看
MariaDB [(none)]> create database lhbdb;Query OK, 1 row affected (0.00 sec)MariaDB [(none)]> show databases;       +--------------------+| Database           |+--------------------+| information_schema || lhbdb              || mysql              || performance_schema || test               |+--------------------+5 rows in set (0.00 sec)

从库上查看是否同步
MariaDB [(none)]> show databases;+--------------------+| Database           |+--------------------+| information_schema || lhbdb              || mysql              || performance_schema || test               |+--------------------+5 rows in set (0.01 sec)


由此可以看到在主数据库上建立数据库lhbdb,则表示成功了^_^^_^^_^

原创粉丝点击