配置MYSQL主从同步
什么是主从同步
能实现什么功能
备份,同步数据
怎么配置
1、确保配置前主从数据一样
2主master配置
[root@host_51 ~]# systemctl stop mysqld
启用binlog日志文件
[root@host_51 ~]# vim /etc/my.cnf
[mysqld]
server_id=51
log-bin=master51
binlog_format="mixed"
:wq
[root@host_51 ~]# systemctl restart mysqld
mysql> system ls /var/lib/mysql/master51.* #(查看,成功的话会有两个文件)
###### replication slave 数据同步权限
用户授权:给从库添加连接时使用的用户名
mysql> grant replication slave on *.* to repluser@"%" identified by "123qqq...A";
查看正在使用的binlog日志信息
mysql> show master status;
3从slave库配置
指定server_id
mysql> show slave status\G; #查看是否是从库
[root@host_52 ~]# vim /etc/my.cnf ##指定从库id
[mysqld]
server_id=52 指定id
:wq
[root@host_52 ~]# systemctl restart mysqld
管理员本机登陆指定主库信息
mysql> show master status;在主库上查看正在使用的binlog日志信息,完成指定主库
mysql> show slave status;
指定主库
mysql> change master to master_host="192.168.4.52",master_user="user",master_password="123qqq...A",master_log_file="master52.000004",master_log_pos=154;
测试授权用户
[root@host_52 ~]# mysql -h192.168.4.51 -urepluser -p123qqq...A
......
mysql>
查看配置
mysql> stop slave;
mysql> start slave;
mysql> show slave status\G;
客户端测试主从配置
在master主库服务器上管理员本机登陆,添加客户端存储数据时,使用的连接用户
mysql> create database game;
mysql> create table t11(id int);
mysql> grant select,insert on game.* to webadimn@"%" identified by "123qqq...A";
[root@host_52 ~] 在此机器登陆
[root@host_50 ~]# mysql -h192.168.4.51 -uwebadimn -p123qqq...A;
mysql> insert into t11 values(1245679);
[root@host_51 ~]
mysql> select * from game.t11;
[root@host_52 ~]
mysql> select * from game.t11;
同时增加写入数据
实现数据同步
###############################################3
ls host52-relay-bin.* #终极日志文件
从库操作
暂时不同步主库数据
stop slave
把从库还原单独库
rm -rf master.info relay-log.info # 还原单独库
rm -rf /var/lib/mysql/host52-relay-bin.*
systemctl restart mysqld
mysql> show slave status\G;
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
【1主】—【2主(1从)】—【2从】
写入1号从库的配置文件 能实现 1主 写入数据,除 1主从 能同步外,2主从也能跟从同步1
[root@host_52 ~]# vim /etc/my.cnf
[mysqld]
binlog_slave_updates
:wq
######################################################################3333
客户端测试主从配置,客户端连接主库存储数据,当在从库本机也能够看到客户端访问连接主库存储的数据。
同步数据原理
##################################################################3
[root@host_52 ~]# vim /etc/my.cnf (以下写在配置文件的)
server_id=数字 #指定id (主库、从库
log-bin=master51 #给日志起名(主库
binlog_format="mixed" #解析翻译日志(主库
slave_log_update #级联复制(主库从库
binlog_do_db=库名列表 #允许同步的库(主库 从库指定了就不需要
binlog_ignore_db=库名列表 #不允许同步的库(主库 从库指定了就不需要
relay_long=名称 #更改中继日志名(从库
replicate_do_db=库名列表 # 只同步的库(从库 主库指定了就不需要
replicate_ignore_db=库名列表 # 只不同步的库(从库 主库指定了就不需要
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
复制模式介绍(配置此模式,主库、从库都需要开启)
异步复制(Asynchronous replication)
主库执行完,立刻将结果反馈客户端,不管从库是否接受并处理了数据
全同步复制(Full synchronous replication)
主库执行完,且所有从库都执行了该事务后,才将结果反馈客户端
半同步复制(Semisynchronous replication)
主库执行完,至少一个从库执行了该事务后并写到relay log中才反馈客户端
模式配置
启用半同步模式,需要加载模块
查看是否允许加载模块
mysql> show variables like 'have_dynameic_loading';
mysql> SELECT PLUGIN_NAME,PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME LIKE '%semi%';
### 查看
mysql> install plugin rpl_semi_sync_master soname 'semisync_master.so';
### 主库上执行
mysql> install plugin rpl_semi_sync_slave soname 'semisync_slave.so';
### 从库上执行
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
mysql> set global rpl_semi_sync_master_enabled = 1; ##主库执行
mysql> set global rpl_semi_sync_slave_enabled = 1; ##从库执行
mysql> show variables like 'rpl_semi_sync_%_enabled'; ##查看
.......................................................................
永久启用半同步复制
vim /etc/my.cnf
主库配置
plugin-load=rpl_semi_sync_master=semisync_master.so
rpl_semi_sync_master_enabled=1
从库配置
plugin-load=rpl_semi_sync_slave=semisync_slave.so
rpl_semi_sync_slave_enabled=1
.....................................................................
在高可用架构下 master和slave需要同时启动,()
以便在切换后能够继续使用半同步复制
【1主2从、2主1从】一个库同时是主库与从库
plugin-load =
"rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"
rpl_semi_sync_master-enabled = 1
rpl_semi_sync_slave-enabled = 1
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
读写分离: 减轻并发压力,提高从库硬件的利用率
部署
人肉分类:需要程序员协同完成,规定程序员存储时连接master数据库,查询时使用slvae数据库。
部署实现数据读写分离服务实现 : Mysql 中间件(mycat、mysql-proxy、maxscale)
配置
1 部署主从同步结构(一主一从)
[Mysql Monitor]
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
.........................................................................
MySQL多实例
在一台物理主机上运行多个数据库,一个数据库是一个实例
vim /etc/my.cnf
[mysqld_multi]
mysqld=/usr/local/mysql/bin/mysqld_safe
mysqladmin=/usr/local/mysql/bin/mysqladmin
user=root
[mysqld1]
port = 3307
datadir = /data3307
socket =/data3307/mysql.sock
pid-file = /data3307/mysqld.pid
log-error=/data3307/mysqld.err
[mysqld2]
port = 3308
datadir = /data3308
socket =/data3308/mysql.sock
pid-file = /data3308/mysqld.pid
log-error=/data3308/mysqld.err
:wq
mkdir /data3307
mkdir /data3308
初始化文件
[root@host_50 ~]# mysqld --user=mysql --basedir=/usr/local/mysql --datadir=/data3307 --initialize
[root@host_50 ~]# mysqld --user=mysql --basedir=/usr/local/mysql --datadir=/data3308 --initialize
启动服务
mysqld_multi start 1
mysqld_multi start 2
测试配置(登陆)
mysql -uroot -pfA=c13MufMoh -S sock文件
mysql -uroot -pqgdR6u.?Nrba -S sock文件(/data3307/mysql.sock)
修改密码
mysql> alter user root@"localhost" identified by "123456";
mysql> alter user user() identified by "123456";