mysql主从搭建

搭建mysql主从服务的目的在于将主数据库的操作实时同步到从数据库,将从数据库作为备份数据库。一旦主数据库发生不可预期的灾难,可以通过备份数据库进行接管或者恢复。

本次搭建mysql主从服务器是在两台Ubuntu16.04环境下测试完成的。

安装mysql

首先需要在两台服务器上安装mysql服务,可以直接执行下面命令:

sudo apt-get install mysql-server

如果安装失败,尝试更新或者更换软件源。注意,更换软件源后一定要执行sudo apt-get update进行更新。

安装完成后可以通过下面的命令测试是否安装成功:

sudo netstat -tap | grep mysql

如果安装成功会出现相应的mysql监听服务。

现在需要设置mysql允许远程访问,首先编辑文件/etc/mysql/mysql.conf.d/mysqld.cnf,注释掉以下内容:

bind-address = 127.0.0.1

保存退出,然后进入mysql服务,执行授权命令:

grant all on *.* to root@'%' identified by '你的密码' with grant option;
flush privileges;

最后退出mysql,重启mysql服务:

service mysql restart

现在就可以在其它地方远程连接mysql了。

主从搭建

MYSQL主从是基于binlog的,主要分为以下几个步骤:

  • 主将更改操作记录到binlog里
  • 从将主的binlog事件(sql语句)同步到从本机上并记录在relaylog里
  • 从根据relaylog里面的sql语句按顺序执行

主上面有一个log dump线程,用来和从的I/O线程传递binlog。从上有两个线程,其中I/O线程用来同步主的binlog并生成relaylog,另外一个SQL线程用来把relaylog里面的sql语句执行一遍。

由于写操作几乎是实时同步到从数据库,因此从数据库一般有两种作用:一种是做备份用,另一种是作为读用。

复制数据库

首先,在主服务器中导出数据库为一个sql文件:

mysqldum -uroot -proot img > /root/img.sql

然后,在从服务器上获取主服务器上的sql文件:

sftp root@ip
get img.sql

exit退出sftp,在从服务器上创建数据库:

mysql -uroot -proot

create database img;
use img;
set names utf8;
source img.sql

主服务器配置

编辑/etc/mysql/mysql.conf.d/mysqld.cnf文件,修改或者添加以下内容:

server-id		= 1
log_bin			= /var/log/mysql/mysql-bin.log
binlog_format           = mixed
expire_logs_days	= 10
max_binlog_size         = 100M
binlog_do_db		= autosyspy_develop
binlog_ignore_db	= mysql

修改完后重启mysql服务:

service mysql restart

最后进入mysql,执行权限语句:

grant all privileges on *.* to 'root'@'%' identified by '自定义密码';
flush privileges;

查看bin-log文件名和位置:

show master status;

可以看到类似如下内容:

+------------------+----------+-------------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB      | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+-------------------+------------------+-------------------+
| mysql-bin.000003 |      769 | img				  | mysql            |                   |
+------------------+----------+-------------------+------------------+-------------------+
1 row in set (0.00 sec)

注意File和Position的内容,在后面的从数据库的配置需要用到。

从服务器配置

编辑/etc/mysql/mysql.conf.d/mysqld.cnf文件,将server-id改为2。然后重启mysql并连接。

配置从数据库:

stop slave;
change master to
master_user='root',
master_password='root',
master_host='主服务器地址',
master_log_file='mysql-bin.000003',   #File
master_log_pos=769;   #Position
start slave;
show slave status\G   #查看是否安装成功

在输出中看到如下结果表明就成功了:

 Slave_IO_Running: Yes
Slave_SQL_Running: YES

如果需要多个从数据库,可以在从数据库的mysqld.cnf文件中设置不同的server_id,并按照以上教程配置一遍。

如果需要同步多个数据库,可以在主服务器的mysqld.cnf文件中,添加多条binlog-do-db,指向多个数据库。

posted @ 2018-06-06 21:05  Suraer  阅读(238)  评论(0编辑  收藏  举报