Tony 老师搭建 MySQL 主从服务器

搭建MySQL主从服务器

目的

  • 如果mysql主服务器的访部量较大,可以通过复制数据,在从服务器 进行查询操作,从而降低主服务器的访问压力
  • 同时从服务器作为主 服务器的备份,可以避免主服务器因为故障导致数据丢失的问题。

方式

  • 基于日志点的复制
  • 基于GTID的复制

主从复制:(基于日志点复制)

1、在主DB服务器上建立复制账号
* CREATE USER repl@'192.168.71.%' identified by 'password'; #创建,建议从服务器IP段
* GRANT REPLICATION SLAVE ON *.* TO repl @'192.168.71.%';   #授权
2、配置主数据库服务器      # vim /etc/my.cnf
* bin_log = mysql-bin    #可指定二进制日志存放目录,目录需开启写入权限
* server_id = 100        #集群中唯一,如主机IP后几段
* #配置完重启
3、 配置从数据库服务器           #vim /etc/my.cnf
* bin_log = mysql-bin          #可指定二进制日志存放目录,目录需开启写入权限
* server_id = 101              #集群中唯一,如主机IP后几段
* relay_log = mysql-relay-bin  #默认主机名,需指定名字
* log_slave_updates = on       #是否开启relay_log写入从服务器bin_log中 集群时做主服务器时需要配置 [可选]
* read_only = on #安全配置参数,阻止没有任何没有sever权限的用户进行写操作,并且可以保证从服务器中由于程序错误导致的写操作不会发生 [可选]
* #配置完重启
4、同步数据
* flush tables with read lock; //锁表
* mysqldump --single-transaction --master-data=2 --triggers --routines cron -uroot -p >>log.sql //导出数据
* vim log.sql 在首行中加入:use cron;
* scp all.sql root@192.168.71.244:/root //将文件备份到从服务器root目录下【若未安装,则安装】
* mysql -uroot -p < log.sql //导入数据
* unlock tables // 备份完成后,解除全局读锁定
**5、启动复制链路**
* CHANGE MASTER TO MASTER_HOST = `master_host_ip`, MASTER_USER = `repl`,MASTER_PASSWORD=`123456`,MASTER_LOG_FILE=`mysql_log_file_name`,MASTER_LOG_POS= 4;
* #注:mysql_log_file_name,MASTER_LOG_POS 在log.sql中查看【也可查看master status:master_log_file,master_log_pos】
6、启动slave
* start slave
7、查看状态
* show slave status\G
8、常用操作:
- stop salve   #停止slave连路
- reset slave  #重置slave连路
- start slave  #开启slave连路
- stop master  #停止master连路
- reset master #重置master连路
- start master #开启master连路
9、常见问题汇总:
* 若需change 某参数
* 首先,stop slave,其次,change master to '参数' = '值'
* 设置防火墙(主从均需要允许3306端口)
* window:添加防火墙规则
* linux:(centos7)
    systemctl status firewalld //系统中应先判断firewalld 是否在运行
    firewall-cmd --list-all //查看所有端口
    firewall-cmd --permanent --zone=public --add-port=3306/tcp //放行3306
    firewall-cmd --reload //使规则生效
    若出现unit is masked 则 systemctl unmask firewalld
* Q:Parameters MASTER_LOG_FILE, MASTER_LOG_POS, RELAY_LOG_FILE and RELAY_LOG_POS cannot be set when MASTER_AUTO_POSITION is active.
* A:change master to master_auto_position=0;

主从复制:(基于GTID复制)

1、在主DB服务器上建立复制账号
* CREATE USER repl@'192.168.71.%' identified by 'password';   #创建,建议从服务器IP段
* GRANT REPLICATION SLAVE ON *.* TO repl @'192.168.71.%';     #授权
2、配置主数据库服务器    #vim /etc/my.cnf
* bin_log = mysql-bin  #可指定二进制日志存放目录,目录需开启写入权限
* server_id = 100      #集群中唯一,如主机IP后几段
* gtid_mode = on  
* enforce_gtid_consistency = on
* log-slave-updates = on
* 配置完重启
3、 配置从数据库服务器            #vim /etc/my.cnf
* bin_log = mysql-bin           #可指定二进制日志存放目录,目录需开启写入权限
* server_id = 101               #集群中唯一,如主机IP后几段
* relay_log = mysql-relay-bin   #默认主机名,需指定名字
* log_slave_updates = on        #是否开启relay_log写入从服务器bin_log中 集群时做主服务器时需要配置 [可选]
* read_only = on                #安全配置参数,阻止没有任何没有sever权限的用户进行写操作,并且可以保证从服务器中由于程序错误导致的写操作不会发生 [可选]
* gtid_mode = on
* enforce_gtid_consistency = on
* master_info_repository = TABLE [建议] #默认存在文件中,主服务器与从服务器连接信息与中继日志信息的存储方式
* relay_log_info_repository = TABLE [建议]
* 配置完重启
4、同步数据
* 同上
5、启动复制链路
* CHANGE MASTER TO MASTER_HOST = `master_host_ip`, MASTER_USER = `repl`,MASTER_PASSWORD=`123456`,MASTER_AUTO_POSTITION = 1;
**6、启动slave**
* start slave
**7、查看状态**
* show slave status\G

主主复制:

1、配置第一台主DB
* server-id = 1
* log-bin=/var/lib/mysql/mysql-bin
* auto_increment_increment = 2
* auto_increment_offset = 1
* #配置完重启
2、配置另一台DB
* server-id = 3
* log-bin=/var/lib/mysql/mysql-bin
* auto_increment_increment = 2
* auto_increment_offset = 2
* 配置完重启
3、创建用户并授权
* 登录MySQL mysql -uroot -p
* 创建用户:CREATE USER repl@'192.168.71.%' identified by 'password';
* 授权:GRANT REPLICATION SLAVE ON *.* TO repl @'192.168.71.%';
* Q:若遇到 your password does not satisfy the current policy requirements
* A: set global validate_password_policy=0;
*    set global validate_password_length=1;
4、数据同步
* flush tables with read lock;  #锁表
* mysqldump --single-transaction --master-data = 2 --triggers --routines cron -uroot -p >> log.sql #导出数据
* vim log.sql 在首行中加入:use cron;
* scp all.sql root@192.168.71.244:/root  #将文件备份到从服务器root目录下【若未安装,则安装】
* mysql -uroot -p < log.sql  #导入数据
* unlock tables  #备份完成后,解除全局读锁定
5、建立关系(第二台关联第一台)
* 登录第一台MySQL
* show master status  #查看状态【可查看master_log_file,master_log_pos】
* 登录第二台MySQL
* change master to
* master_host='192.168.71.37', # 主节点
* master_port=3306, #主节点的端口号
* master_user='repl', # 账号
* master_password='repl', # 密码
* master_log_file='mysql-bin.000002', # show master status 对应的的日志
* master_log_pos=2072; # show master status 对应的
* start slave #启动库
6、建立关系(第一台关联第二台)
* 登录第二台MySQL
* show master status #查看状态【可查看master_log_file,master_log_pos】
* 登录第一台MySQL
* change master to
* master_host='192.168.71.244', # 主节点
* master_port=3306, #主节点的端口号
* master_user='repl', # 账号
* master_password='repl', # 密码
* master_log_file='mysql-bin.000001', # show master status 对应的的日志
* master_log_pos=702; # show master status 对应的
* start slave #启动库
* #日志复制:若master 重启,则日志点发生改变,需要重新配置slave日志点和位置,故笔者建议配置为GTID
本作品采用《CC 协议》,转载必须注明作者和本文链接
来杯可乐不加糖。
本帖由系统于 4年前 自动加精
讨论数量: 1

我对着这个挨个实验一遍,看看我能成功不?

3年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!