搭建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 statusG #查看是否安装成功
在输出中看到如下结果表明就成功了:
Slave_IO_Running: Yes
Slave_SQL_Running: YES
如果需要多个从数据库,可以在从数据库的mysqld.cnf文件中设置不同的server_id,并按照以上教程配置一遍。
如果需要同步多个数据库,可以在主服务器的mysqld.cnf文件中,添加多条binlog-do-db,指向多个数据库。