首先介绍一些我的基本环境信息:
系统版本:centOs
Mysql版本: 5.7.22
主库ip: 10.138.65.2
从库ip: 10.12.206.89
在配置文件中配置如下信息,
1、配置 Master 以使用基于二进制日志文件位置的复制
2、必须启用二进制日志记录并建立唯一的服务器ID,否则则无法进行主从复制。
3、设置 binlog 文件的格式
vim /etc/my.cnf
bind_address = 0.0.0.0 # 允许所有机器远程连接 # binlog配置 log_bin = /home/local/mysql/mysql-bin.log # 必须设置唯一的server-id server-id = 1 binlog_format = ROW
service mysql restart
首先以root账号登录主机mysql
mysql -h -uroot -p
在主库创建从库的账号及密码,并且使得从库可以连接,通过需要给账号授予复制权限,可以选择为每个从库创建不同的帐户,或者每个从库使用相同帐户连接到主库。
这里我给从库ip创建了 repl
账号,并且赋予了 复制权限。
# 创建复制账号 CREATE USER 'repl'@'10.12.206.89' IDENTIFIED BY 'slavepass'; GRANT REPLICATION SLAVE ON *.* TO 'repl'@'10.12.206.89';
在主机中执行,该信息主要是用于slave上配置从哪个位置开始复制
mysql> show master status; -- 结果如下 +------------------+----------+--------------+------------------+-------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +------------------+----------+--------------+------------------+-------------------+ | mysql-bin.000012 | 1176 | | | | +------------------+----------+--------------+------------------+-------------------+
将主机上所有数据库文件被分到 dbdump.sql文件中,主要是用于恢复文件。
mysqldump -u root -p --all-databases --master-data > dbdump.sql
scp dbdump.sql 10.12.206.89:/tmp
同样在 /etc/my.cnf 下配置如下配置,主要是设置从服务器监听的ip地址,设置server-id,注意这个id必须与主机的id不一样。
通过是要开启binlog配置,并且设置binlog的文件格式及文件路径
# bin log 配置 bind-address = 10.12.206.89 log_bin = /home/work/local/mysql/mysql-bin.log server-id = 2 binlog_format = ROW
service mysql restart
当然这一步也不是必须的,可以备份,也可以不用备份。
mysql -u root -p < /tmp/dbdump.sql
1、首先以 root 用户登录mysql服务器
mysql -u root -p
2、暂停备份
stop salve;
3、创建从库与主库之间通信
主要配置如下信息:主库id、端口、备份账号、密码、主库的开始bin-log文件
CHANGE MASTER TO MASTER_HOST='10.138.65.2', MASTER_PORT=8306, MASTER_USER='repl', MASTER_PASSWORD='slavepass', MASTER_LOG_FILE='mysql-bin.000012', MASTER_LOG_POS=1176;
4、开始备份
start slave;
mysql> show slave status\G *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 10.138.65.2 Master_User: repl Master_Port: 8306 Connect_Retry: 60 Master_Log_File: mysql-bin.000015 Read_Master_Log_Pos: 2698 Relay_Log_File: public-relay-bin.000012 Relay_Log_Pos: 2911 Relay_Master_Log_File: mysql-bin.000015 Slave_IO_Running: Yes Slave_SQL_Running: Yes Replicate_Do_DB: ……………… Seconds_Behind_Master: 0 ………………
怎么看备份是否建立成功呢?
其实主要看三个地方
1、Slave_IO_Running:读取主程序二进制日志的I/O线程是否正在运行【如果是yes表示建立成功】
2、Slave_SQL_Running:执行读取主服务器中二进制日志事件的SQL线程是否正在运行【如果是yes表示建立成功】
3、Seconds_Behind_Master:0 【表示无延迟,如果是null,则一般未建立】
登录主服务器,创建一个用于测试的数据库,比如
mysql> CREATE DATABASE `test`; mysql> use test
创建一个用于测试的数据库
CREATE TABLE `user` ( `id` int(11) NOT NULL, `name` varchar(64) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8
mysql> show tables; +----------------+ | Tables_in_test | +----------------+ | user | +----------------+ 1 row in set (0.00 sec)
到这里,主从服务器搭建成功了,如果大家测试中遇到什么问题,不要担心,只需要查询资料即可,一般问题之前的人都踩过坑的。