mysql5.7 主从复制安装

目录

环境

安装mysql

数据库配置文件 

异步复制

修改数据库配置文件

 主数据库建立复制用户并授权

备份主库,初始化从库

在从库执行主从配置命令

 验证

优化

半同步复制


​​​​​​​

环境

mysql 5.7.36

系统:ubuntu18.04

使用半同步复制、一主一从架构

两台主机:主节点192.168.0.104,从节点192.168.0.105

安装mysql

https://dev.mysql.com/downloads/mysql/5.7.html?os=src  下载mysql

sudo dpkg -i mysql下载的包名
sudo apt install mysql-server 

过程中输入root 密码,等待安装完毕 ,查看mysql是否启动

service mysql status

配置允许远程访问mysql

mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '密码' WITH GRANT OPTION; 
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

 如果还不能远程访问,在/etc/mysql 下找.cnf文件,在[mysqld]配置中添加

bind-address            = 0.0.0.0

重启service mysql restart 

数据库配置文件 

/etc/mysql/my.cnf是个总的配置文件,里面标注了配置文件包括以下两个路径

!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mysql.conf.d/

 /etc/mysql/mysql.conf.d/ 目录下有 mysqld.cnf  mysqld_safe_syslog.cnf 两个文件,可见mysqld.cnf是[mysqld]的配置,如果my.cnf和mysqld.cnf里配置重复,mysqld.cnf生效。

异步复制

修改数据库配置文件

sudo vim /etc/mysql/my.cnf

主节点

[mysqld]
server-id=100
log-bin=mysql-bin
binlog_format=row

从节点

[mysqld]
server-id=101
log-bin=mysql-bin
binlog_format=row
master_info_repository=TABLE
relay_log_info_repository=TABLE
log_slave_updates=on
relay_log_recovery=1

 主数据库建立复制用户并授权

mysql> GRANT REPLICATION SLAVE ON *.* to 'mysync'@'%' identified by '123456';
Query OK, 0 rows affected, 1 warning (0.04 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.04 sec)

备份主库,初始化从库

把主库的数据备份,在从库上恢复,主库名称testcopy

mysqldump -uroot -proot --single-transaction --master-data=2 --databases testcopy>/tmp/testcopy.dmp
  • --master-data=2,使dmp文件记录备份这一时刻的binlog文件和position号
  • --single-transaction在导出前开启一个事务

cat testcopy.dmp 查看dmp文件,能看到备份时刻使用的binlog文件名和position号

把dmp放到从库上,恢复数据,从库就会产生testcopy库及其数据

mysql -uroot -proot <testcopy.dmp

在从库执行主从配置命令

change master to master_host='192.168.0.104',master_user='mysync',master_password='123456',master_port=3306,master_log_file='mysql-bin.000002',master_log_pos=1197

启动从库 

mysql> start slave;
Query OK, 0 rows affected (0.01 sec)

 查询从库状态

show slave status\G;

          slave两个线程状态一定要是yes,Slave_IO_Running: Yes  Slave_SQL_Running: Yes 

 

 验证

在主库修改数据,从库数据也会修改

优化

mysql参数innodb_flush_log_at_trx_commit,sync_binlog 两者设置为1,保证主库数据不丢失,从库数据最终一致性。

半同步复制

在主库安装半同步插件、开启半同步功能、将超时时间设置的比较大防止网络原因导致超时。

mysql> install plugin rpl_semi_sync_master soname 'semisync_master.so';
Query OK, 0 rows affected (0.05 sec)

mysql> set global rpl_semi_sync_master_enabled=on;
Query OK, 0 rows affected (0.00 sec)

mysql> set global rpl_semi_sync_master_timeout=30000;
Query OK, 0 rows affected (0.00 sec)

在从库安装插件、开启半同步

mysql> install plugin rpl_semi_sync_slave soname 'semisync_slave.so';
Query OK, 0 rows affected (0.05 sec)

mysql> set global rpl_semi_sync_slave_enabled=1;
Query OK, 0 rows affected (0.00 sec)

也可以把上面设置全局变量 分别放到主从的my.cnf文件中,保证重启后自动执行半同步复制。

重启从库的io线程,激活半同步

mysql> stop slave io_thread;
Query OK, 0 rows affected (0.02 sec)

mysql> start slave io_thread;
Query OK, 0 rows affected (0.01 sec)

 在从库查看半同步状态:

mysql> show status like '%semi_sync%'
    -> ;
+----------------------------+-------+
| Variable_name              | Value |
+----------------------------+-------+
| Rpl_semi_sync_slave_status | ON    |
+----------------------------+-------+
1 row in set (0.00 sec)

在主库查看:Rpl_semi_sync_master_clients 为1说已经有一个从库连接到了主库,是半同步模式。 Rpl_semi_sync_master_status 为ON。

mysql> show status like '%semi_sync%';
+--------------------------------------------+-------+
| Variable_name                              | Value |
+--------------------------------------------+-------+
| Rpl_semi_sync_master_clients               | 1     |
| Rpl_semi_sync_master_net_avg_wait_time     | 0     |
| Rpl_semi_sync_master_net_wait_time         | 0     |
| Rpl_semi_sync_master_net_waits             | 0     |
| Rpl_semi_sync_master_no_times              | 0     |
| Rpl_semi_sync_master_no_tx                 | 0     |
| Rpl_semi_sync_master_status                | ON    |
| Rpl_semi_sync_master_timefunc_failures     | 0     |
| Rpl_semi_sync_master_tx_avg_wait_time      | 0     |
| Rpl_semi_sync_master_tx_wait_time          | 0     |
| Rpl_semi_sync_master_tx_waits              | 0     |
| Rpl_semi_sync_master_wait_pos_backtraverse | 0     |
| Rpl_semi_sync_master_wait_sessions         | 0     |
| Rpl_semi_sync_master_yes_tx                | 0     |
+--------------------------------------------+-------+
14 rows in set (0.01 sec)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值