mysql-day06 部署mysql主从同步
案例拓扑
• 一主、一从
– 单向复制时,建议将从库设为只读
一、什么是mysql主从同步
主:正在被客户端访问的数据库服务器,被称作主库服务器。
从:自动同步主库上的数据的数据库服务器,被称作从库服务器。
主从同步结构模式介绍
•基本应用
–单向复制:主-->从
•扩展应用
–链式复制:主-->从-->从
–双向复制:主<-->从
–放射式复制:从<--主-->从
|
从
主从同步原理(续 1 )
基本构建思路
1.确保数据相同
–从库必须要有主库上的数据。
2.配置主服务器
–启用binlog日志及设置格式,设置server_id,授权用
户
3.配置从服务器
–设置server_id,指定主数据库服务器信息
4.测试配置
–客户端连接主库,写入的数据,在连接从库的时候也
能够访问到。
相关命令
mysql>show slave status;#显示从库状态信息
mysql>show master status;#显示本机的binlog日志文件信息
mysql>show processlist;#查看当前数据库服务器上正在执行的程序
mysql>start slave;#启动slave进程
mysql>stop slave;#停止slave进程
***************************************************
确保数据相同
•Master服务器
–应包括希望同步的所有库
–对采用MyISAM的库,可离线备份
mysql>RESET MASTER;
//重置binlog日志
[root@dbsvr1~]#mysqldump -u root -p -B mysql test > mytest.sql
Enter password:
//验证口令确保数据相同(续1)
•Slave服务器
–离线导入由Master提供的备份
–清空同名库(若有的话)
mysql>DROP DATABASE test;
//先清理目标库
[root@dbsvr2~]#scp dbsvr1:/root/mytest.sql./
//直接scp远程拷贝
[root@dbsvr2~]#mysql -uroot -p < mytest.sql
Enter password:
//验证口令
******************************************************
问题:
2.1拓扑图
数据库服务器192.168.4.51做主库
数据库服务器192.168.4.52做从库
2.2环境准备
主从同步未配置之前,要保证从库上要有主库上的数据。
禁用selinux]#setenforce 0
关闭防火墙服务]#systemctl stop firewalld
物理连接正常]#ping-c 2 192.168.4.51/52
数据库正常运行,管理可以从本机登录
*********************host 192.168.4.52配置主库
1)启用binlog日志
Vim /etc/my.cnf
[mysqld]
server_id=52
log-bin=master52
binlog-format="mixed"
:wq
1)启动服务
]#systemctl restart mysqld
2)查看binlog日志文件名
]#ls /var/lib/mysql/master52.*
/var/lib/mysql/master52.000001 /var/lib/mysql/master52.index
3)查看徧移量
]#mysql -uroot -p1234564
mysql>show master status;
4)做用户授权 (在主库上52给从库53授权)
mysql>grant replication slave on *.*
->to
->repluser@"192.168.4.53"
->identified by"123456";
# grant replication slave on *.* to yaya@"192.168.4.54" identified by"123456";
5)查看授权用户
mysql>select user,host from mysql.user;
*********************host 192.168.4.53配置从库
a验证主库的用户授权
]#mysql -h192.168.4.52 -urepluser- p123456
mysql>show grants;
mysql>quit;
1)指定server_id
]#vim /etc/my.cnf
[mysqld]
server_id=53
:wq
]#systemctl restart mysqld
2)数据库管理员本机登录,指定主数据库服务器的信息
]#mysql -uroot -p123456
mysql>change master to
master_host="192.168.4.52",//主库
master_user="yaya",//连主库用户
master_password="123456",//用户密码
master_log_file="master52.000001",//binlog日志文件名
master_log_pos=448;//徧移量
# change master to master_host="192.168.4.52", master_user="yaya", master_password="123456",master_log_file="master52.000007",master_log_pos=154;
3)启动slave进程
mysql>start slave;
4)查看进程状态信息
mysql>show slave statusG;
Slave_IO_Running:Yes
Slave_SQL_Running:Yes
5)在客户端测试主从同步配置52
v 在主库服务器上添加访问数据时,使用连接用户//grant all on*.*
]#mysql -uroot -p123456
mysql>grant all on bbsdb.*to webadmin@"%" identified by "123456";
mysql>select user,host from mysql.user where user="webadmin";
mysql>quit;
v 客户端使用主库的授权用户,连接主库服务器,建库表插入记录
251]#mysq -h192.168.4.52 -uwebadmin -p123456
mysql>建库建表插入记录
v 在从库本机,使用管理登录查看是否有和主库一样库表记录及授权用户
52]#mysql -uroot -p123456
mysql>select * from 库.表;
2.4.4客户端使用主库的授权用户,连接从库服务器,也可以看到新建的库表及记录
253]#mysql -h192.168.4.52 -uwebadmin -p123456
mysql>select * from 库.表;
6)不同步在192.168.4.53
u 停止stop slave;
mysql>stop slave;
u 在主库本机上键值
mysql-uroot-p123456
mysql>进库进表插入记录
u 其他主机上查看,没有插入数据的数据
在192.168.4.53主机上执行
mysql>start slave;
u 其他主机上查看,没有插入数据的数据
常用配置选项
主库配置选项
•适用于Master服务器 选项用途
binlog_do_db=name设置Master对哪些库记日志
binlog_ignore_db=name设置Master对哪些库不记日志
从库配置选项
•适用于Slave服务器
选项用途
log_slave_update记录从库更新,允许链式复制(A-B-C
relay_log=dbsvr2-relay-bin指定中继日志文件名
replicate_do_db=mysql仅复制指定库,其他库将被忽略,此选项
可设置多条(省略时复制所有库)
replicate_ignore_db=test不复制哪些库,其他库将被忽略,ignore-db与 do-db只需选用其中一种
一主多从
2.1拓扑图
数据库服务器192.168.4.52做主库
数据库服务器192.168.4.53做从库
数据库服务器192.168.4.54做从库
2.2环境准备
主从同步未配置之前,要保证从库上要有主库上的数据。
禁用selinux]#setenforce 0
关闭防火墙服务]#systemctl stop firewalld
物理连接正常]#ping -c 2 192.168.4.51/52/53/54
数据库正常运行,管理可以从本机登录
2.3配置mysql主从同步
v 配置主库192.168.4.52
a创建用户授权
b启用binlog日志
c查看正在使用binlog日志信息
v 配置从库192.168.4.53/54
a验证主库的用户授权
b指定server_id
c数据库管理员本机登录,指定主数据库服务器的信息
mysql>change master to
->master_host="主库ip地址",
->master_user="主库授权用户名",
->master_password="授权用户密码",
->master_log_file="主库binlog日志文件名",
->master_log_pos=binlog日志文件偏移量;
d启动slave进程
e查看进程状态信息
2.4在客户端测试主从同步配置
- 在主库服务器上添加访问数据时,使用连接用户
- 客户端使用主库的授权用户,连接主库服务器,建库表插入记录
- 在从库本机,使用管理登录查看是否有和主库一样库表记录及授权用户
- 客户端使用主库的授权用户,连接从库服务器,也可以看到新建的库表及记录
课外知识:
恢复数据库管理员权限
1)修改配置文件vim /etc/mysql.cnf
[mysqld]
skip-grant-tables
server_id=54
#validate_password_policy=0
#validate_password_length=6
2)重启服务
[root@host54~]#systemctl restart mysqld
3)进入数据库
[root@host54~]#mysqld
****修改权限
mysql>UPDATEmysql.userSET
select_priv='Y',Insert_priv='Y',Update_priv='Y',Delete_priv='Y',Create_priv='Y',Drop_priv='Y',Reload_priv='Y',File_priv='Y',Grant_priv='Y',References_priv='Y',Index_priv='Y',Alter_priv='Y',Show_db_priv='Y',Super_priv='Y',Create_tmp_table_priv='Y',Lock_tables_priv='Y',Execute_priv='Y',Repl_slave_priv='Y',Repl_client_priv='Y',Create_view_priv='Y',Show_view_priv='Y',Create_routine_priv='Y',Alter_routine_priv='Y',Create_user_priv='Y',Event_priv='Y',Trigger_priv='Y',Create_tablespace_priv='Y'where user="root";
UPDATE mysql.user SET Shutdown_priv='y'where user="root";
****刷新
mysql>flush privileges;
4)修改配置文件vim /etc/mysql.cnf
[mysqld]
#skip-grant-tables
server_id=54
validate_password_policy=0
validate_password_length=6
5)重启服务
[root@host54~]#systemctl restart mysqld
查看:mysql>show variables like"rpl_semi_sync_%_enabled";
若是忘记密码
[sql]view plain copy
update mysql.user set password=PASSWORD('password')where User='root';
复制模式介绍
•异步复制(Asynchronous replication)
–主库在执行完客户端提交的事务后会立即将结果返给
客户端,并不关心从库是否已经接收并处理。
•全同步复制(Fully synchronous replication)
–当主库执行完一个事务,所有的从库都执行了该事务
才返回给客户端。
•半同步复制(Semisynchronous replication)
–介于异步复制和全同步复制之间,主库在执行完客户
端提交的事务后不是立刻返回给客户端,而是等待至
少一个从库接收到并写到relay log(中继日志)中才返回给客户端
模式配置
•查看是否允许动态加载模块
–默认允许
mysql>show variables like"have_dynamic_loading";
•命令行加载插件
–用户需有SUPER权限
主库:mysql>INSTALL PLUGIN rpl_semi_sync_master
SONAME'semisync_master.so';
从库:mysql>INSTALL PLUGIN rpl_semi_sync_slave
SONAME'semisync_slave.so';
查看:mysql>SELECT PLUGIN_NAME,PLUGIN_STATUS FROM
INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME
LIKE'%semi%';
•启用半同步复制
–在安装完插件后,半同步复制默认是关闭的
主: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";
•配置文件永久启用半同步复制
–命令配置临时配置,重启服务会失效
–修改后需要重启服务
–写在主配置文件/etc/my.cnf的[mysqld]下方
主:
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需同时启动
–以便在切换后能继续使用半同步复制
plugin-load=
"rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=sems
ync_slave.so“
rpl-semi-sync-master-enabled=1
rpl-semi-sync-slave-enabled=1
***********************************************************************