MySQL主从复制—2.⼀主⼀从1、准备说明
- 两台服务器要时间同步,ntp+crontab
- Master和Slave的版本最好相同,⾄少保证Slave的版本要⽐Master的版本⾼
- 创建复制⽤⽤户repl并赋权
- 主从服务器Server-ID要不同
- 从服务器要启动中继⽇志,禁⽤⼆进制⽇志
2、创建、赋权⽤户
- 在主机创建并赋权复制⽤户
| mysql> grant replication slave,replication client on *.* to 'repl'@'从机ip' identified by '密码';
| # 单独赋权slave和client
| # 出于安全考虑,只给从机地址访问权限
floor和ceil函数-
出现ERROR 1819 (HY000): Your password does not satisfy ...
| mysql> set global validate_password_policy=LOW; // 降低密码复杂度
mysql> grant replication slave,replication client on *.* to 'repl'@'从机ip' identified by '密码';
mysql> flush privileges;
3、设置配置⽂件
3.1-配置概括
- 主机
| 1.设置server-id
| 2.启动binlog
- 从机
| 1.设置server-id
| 2.禁⽤binlog
| 3.启动relaylog
3.2-配置⽂件说明
log_slave_updates // 表⽰从节点⾃动更新
slave_skip_errors=all // 跳过所有错误⽇志
sync_binlog=1 // 每次事务提交,MySQL都会写⼊binlog
# 1最安全但是性能损耗最⼤;默认是0;⼀般有设置100的
log_slave_updates=1 // 从库⾃动更新
3.3-主库配置⽂件(/etc/myf)
※傻⽠式安装,本地datadir的默认值 "datadir=/var/lib/mysql" ※
※遵循此⽬录⼿⼯添加⼆进制⽬录和中继⽬录,否则会报错※
#binlog
#binlog_format=statement
server-id=1 // id要不同
log-bin=/var/lib/mysql/mysql-bin // 开启⼆进制⽇志,并设置路径
binlog_format=mixed // 设置混合模式
binlog_cache_size=4M
expire_logs_days=10
sync_binlog=0
log-bin-index=binlog.index // 除了路径、id、模式,⾃玩其他都不重要
3.4-从库配置⽂件(/etc/myf)
# binlog
serializearray可以删除吗
# binlog_format=statement
server-id=2
# log-bin=/var/lib/mysql/mysql-bin // 关闭从机⼆进制⽂件
binlog_format=mixed
binlog_cache_size=4M
expire_logs_days=10
log-bin-index=binlog.index
relay_log_purge=1
relay_log_recovery=1
relay-log=/var/lib/mysql/rely-bin // 开启从机中继⽇志
relay-log-index=relay-bin.index
3.5-查看相关状态
[root@localhost mysql]# systemctl restart mysqld // 主从都重启mysql
excel表格if怎么用mysql> show global variables like '%log_bin%'; // 主端
+---------------------------------+--------------------------------+
| Variable_name | Value |
+---------------------------------+--------------------------------+
| log_bin | ON |
| log_bin_basename | /var/lib/mysql/mysql-bin |
| log_bin_index | /var/lib/mysql/mysql-bin.index |
| log_bin_trust_function_creators | OFF |
| log_bin_use_v1_row_events | OFF |
mysql无法连接到服务器
+---------------------------------+--------------------------------+
mysql> show global variables like '%relay%'; // 从端
+---------------------------+------------------------------------------+
| Variable_name | Value |
+---------------------------+------------------------------------------+
| max_relay_log_size | 0 |
| relay_log | |
| relay_log_basename | /var/lib/mysql/localhost-relay-bin |
| relay_log_index | /var/lib/mysql/localhost-relay-bin.index |
| relay_log_info_file | relay-log.info |
removeattribute什么意思| relay_log_info_repository | FILE |
| relay_log_purge | ON |
| relay_log_recovery | OFF |
| relay_log_space_limit | 0 |
| sync_relay_log | 10000 |
| sync_relay_log_info | 10000 |
+---------------------------+------------------------------------------+
# basename,index与配置⽂件中不⼀致是我中间做了操作;这⾥显⽰的是默认值,后已变更。
4、从端连接主端
4.1-查看主机⼆进制⽂件信息
mysql> show master status;
+------------------+----------+--------------+---------- -+------------+
| File | Position | Binlog_Do_DB | Binlog_... |
+------------------+----------+--------------+------------+------------+
| mysql-bin.000002 | 154 | | | |
+------------------+----------+--------------+------------+------------+
# 连接的时候⽤这两个数值File和Position
4.2-连接Master
- 从库指定复制⽤户,主服务器IP、端⼝以及开始执⾏复制的⽇志⽂件和位置等
| mysql> change master to master_host='主ip',master_user='复制⽤户',
| -> master_password='密码',master_port=3306,
| -> master_log_file='flie',master_log_pos=position;
# master_port和master_log_pos是不加引号的
# master_log_file和master_log_pos是上边查出来的值
4.3-change master to 选项说明
- master_bino='interfce_name'
- master_host='host_name' // 指定连接的Master服务器的地址
- master_user='user_name' // 指定连接的Master进⾏复制使⽤的账号
- master_password='password' // 密码
- master_port=port_num // 指定连接Master的哪个端⼝
- master_connect_retry=interval // 重试间隔时间
- master_retry_count=count // 重试次数
- master_delay=interval // 当Slave发现Master的⼼跳信息消失,隔多久中再次测试
- master_heartbeat_period=interval // Slave端每隔多长时间测试⼀次主端是否在线
-
master_log_file='master_log_name' // 指定让Slave读取Master的哪个⼆进制⽇志⽂件
- master_log_pos=master_log_pos // 指定让Slave读取Master的哪个⼆进制⽇志⽂件的位置- master_auto_position={0|1} // 1是⾃动点同步
- relay_log_file='relay_log_name'
- relay_log_pos=relay_log_pos
- master_ssl_ca='ca_file_name'
- master_ssl_capath='ca_directory_name'
- master_ssl_cert='cert_file_name'
- master_ssl_crl
- master_ssl_crlpath
- master_ssl_key
- master_ssl_cipher
- master_ssl_verify_server_cert
- master_tls_version
- master_server_ids
5、从端开启主从复制
5.1-正常启动slave
mysql> show slave status\G
mysql> start slave;
mysql> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Connecting to master
Master_Host: 192.168.3.123
Master_User: repl
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000002
Read_Master_Log_Pos: 154
Relay_Log_File: rely-bin.000002
Relay_Log_Pos: 4
Relay_Master_Log_File: mysql-bin.000002
Slave_IO_Running: Connecting // 必须两个都是Yes,未开启是No
Slave_SQL_Running: Yes // connecting可能有多种原因造成
5.2-排查connecting错误后,重启
mysql> stop slave;
.....
.....
mysql> start slave;
mysql> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.3.123
Master_User: repl
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000004
Read_Master_Log_Pos: 2033
Relay_Log_File: rely-bin.000007
Relay_Log_Pos: 2246
Relay_Master_Log_File: mysql-bin.000004
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
# 排查后是ip写错;操作需谨慎;修改完最好刷新权限 flush privileges;
# 配置新机,⼜connecting;firewall没设置,关闭;selinux不⽤理会
================================================================== - Slave_IO_Running的Connecting
| 1.⽹络不通
| 2.账号密码错误
| 3.防⽕墙
| 4.mysql配置⽂件问题
| 5.连接服务器时语法问题
| 6.主服务器mysql权限问题
- Slvae_SQL_Running未碰到问题,不整理了
6、从库设置只读
mysql> set global read_only=1; // 开启只读模式
Query OK, 0 rows affected (0.00 sec)
mysql> flush tables with read lock; // 从数据库设定全局锁
mysql> unlock tables; // 从数据库解除全局锁
# 1.只读模式只能限制普通⽤户,不能限制超级⽤户;也不能限制有较⾼权限普通⽤户。
# 4.如果加了全局锁,⼆进制⽇志是否同步?是否可以通过⼿动⽅式重新加载呢?
7、从库清除主从复制
# 增加清理步骤是为了汇总整理到⼀起
mysql> stop slave;
mysql> reset slave;
mysql> show slave status\G
*************************** 1. row *************************** // 未清理⼲净
Slave_IO_State:
Master_Host: 192.168.3.121
Master_User: repl
Master_Port: 3306
Connect_Retry: 60
Master_Log_File:
Read_Master_Log_Pos: 4
Relay_Log_File: localhost-relay-bin.000001
Relay_Log_Pos: 4
Relay_Master_Log_File:
Slave_IO_Running: No
Slave_SQL_Running: No重定向和转发的区别以及实例代码
=============================================================
mysql> reset slave all;
mysql> show slave status; // 清理⼲净了
Empty set (0.11 sec)
8、补充内容
¤ Ⅰ连接主机设置说明 ¤
mysql> change master to master_host='ip',master_user='⽤户',master_password='密码';
# 1.没指定从哪个⼆进制⽂件开始复制,就是从0开始复制,会读取master的全部⼆进制⽇志⽂件。# 2.如Master已经运⾏很久了,不能这样写。
# 3.我⽤5.7就这么写效果⽐较好。指定⼆进制⽂件的话,反⽽⽆法识别
==========================================================
¤ Ⅱ启动复制相关线程 ¤
- 三种启动模式
- 1.默认启动
| mysql> start slave;
- 2.只启动某⼀个线程,⽐如启动io
| mysql> start slave thread_type io_thread;
- 3.复制到指定位置就停⽌复制
| mysql> start slave until master_log_file='binlog-index-000012',master_log_pos=120;
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论