共计 4848 个字符,预计需要花费 13 分钟才能阅读完成。
CentOS MySQL 安装
MySQL (Master/Slave) 主从同步
1、为什么要使用主从同步
1. 如果主服务器出现问题,可以快速切换到从服务器提供的服务
2. 可以在从服务器上执行查询操作,降低主服务器的访问压力
3. 可以在从服务器上执行备份,以避免备份期间影响主服务器的服务
注意:一般只有更新不频繁的数据或者对实时性要求不高的数据可以通过从服务器查询,实时性要求高的数据仍然需要从主服务器获得。
Windows 数据库主从(Master/Slave)同步安装与配置详解 http://www.linuxidc.com/Linux/2017-11/148520.htm
2、CentOS 安装 Mysql 5.7.19
CentOS 7.3 安装 MySQL 并修改初始密码 http://www.linuxidc.com/Linux/2017-11/148522.htm
Windows 安装 MySQL 并修改初始密码 http://www.linuxidc.com/Linux/2017-11/148521.htm
3、测试环境
我这里使用 parallels desktop 虚拟机安装的 Centos 操作系统
数据库版本:5.7.19
主机 A:10.211.55.3(Master)
主机 B:10.211.55.4(Slave)
service mysqld stop # 停止数据库 | |
service mysqld start # 启动数据库 | |
service mysqld restart # 重启数据库 |
4、配置主服务器 Master
4.1 给从服务器设置授权用户(创建复制帐号)
建立一个帐户 javen,并且只能允许从 10.211.55.4 这个地址上来登陆,密码是 123456。
mysql> grant replication slave on *.* to 'javen'@'10.211.55.4' identified by '123456'; | |
mysql> flush privileges; |
4.2 主服务器 Master 配置
在 etc/my.cnf
的 [mysqld]
下添加如下内容
port=3306 | |
#[必须]启用二进制日志 | |
binlog-ignore-db=mysql | |
#[必须]服务器唯一 ID,默认是 1 | |
server-id= 1 | |
# 只保留 7 天的二进制日志,以防磁盘被日志占满 | |
expire-logs-days = 7 | |
# 不备份的数据库 | |
binlog-ignore-db=information_schema | |
binlog-ignore-db=performation_schema | |
binlog-ignore-db=sys | |
binlog-ignore-db=gogs |
4.3 重启 MySQL 服务并设置读取锁定
service mysqld restart
在主服务器上设置读取锁定有效,确保没有数据库操作,以便获得一个一致性的快照
mysql -u root -proot -P3306 | |
mysql> flush tables with read lock; |
4.4 查看主服务器上当前的二进制日志名和偏移量值
mysql> show master status; | |
+------------------+----------+--------------+-------------------------------------------------------+-------------------+ | |
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | | |
+------------------+----------+--------------+-------------------------------------------------------+-------------------+ | |
| mysql-bin.000001 | 154 | | mysql,information_schema,performation_schema,sys,gogs | | | |
+------------------+----------+--------------+-------------------------------------------------------+-------------------+ | |
1 row in set (0.00 sec) |
这里的 File、Position 是在配置 Salve 的时候要使用到的,Binlog_Do_DB 表示要同步的数据库,Binlog_Ignore_DB 表示 Ignore 的数据库,这些都是在配置的时候进行指定的。
另外:如果执行这个步骤始终为 Empty set(0.00 sec),那说明前面的 my.cnf 没配置对。
5、配置从服务器 Slave
5.1 修改从数据库的配置
修改之后完整的配置如下:
# For advice on how to change settings please see | |
# http://dev.mysql.com/doc/refman/5.7/en/server-configuration-defaults.html | |
[mysqld] | |
# | |
# Remove leading # and set to the amount of RAM for the most important data | |
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%. | |
# innodb_buffer_pool_size = 128M | |
# | |
# Remove leading # to turn on a very important data integrity option: logging | |
# changes to the binary log between backups. | |
# log_bin | |
# | |
# Remove leading # to set options mainly useful for reporting servers. | |
# The server defaults are faster for transactions and fast SELECTs. | |
# Adjust sizes as needed, experiment to find the optimal values. | |
# join_buffer_size = 128M | |
# sort_buffer_size = 2M | |
# read_rnd_buffer_size = 2M | |
datadir=/var/lib/mysql | |
socket=/var/lib/mysql/mysql.sock | |
## 以下是添加的内容 | |
log-bin=mysql-bin | |
server-id=3 | |
binlog-ignore-db = mysql | |
binlog-ignore-db = information_schema | |
binlog-ignore-db = performation_schema | |
binlog-ignore-db = sys | |
log-slave-updates | |
slave-skip-errors=all | |
slave-net-timeout=60 | |
# Disabling symbolic-links is recommended to prevent assorted security risks | |
symbolic-links=0 | |
log-error=/var/log/mysqld.log | |
pid-file=/var/run/mysqld/mysqld.pid |
5.2 重启从数据库并设置 Slave 数据库
service mysqld restart
登录从数据库并做如下设置
stop slave; # 关闭 Slave | |
change master to master_host='10.211.55.3',master_user='javen',master_password='123456',master_log_file='mysql-bin.000001', master_log_pos= 154; | |
start slave; # 开启 Slave |
注意:在这里指定 Master 的信息,master_log_file 是在配置 Master 的时候的 File 选项,master_log_pos 是在配置 Master 的 Position 选项,这里要进行对应。
### 5.3 查看 Slave 配置的信息
mysql> show slave status \G; | |
*************************** 1. row *************************** | |
Slave_IO_State: | |
Master_Host: 10.211.55.3 | |
Master_User: javen | |
Master_Port: 3306 | |
Connect_Retry: 60 | |
Master_Log_File: mysql-bin.000001 | |
Read_Master_Log_Pos: 154 | |
Relay_Log_File: centos-linux-2-relay-bin.000001 | |
Relay_Log_Pos: 4 | |
Relay_Master_Log_File: mysql-bin.000001 | |
Slave_IO_Running: No | |
Slave_SQL_Running: No | |
Replicate_Do_DB: | |
Replicate_Ignore_DB: | |
Replicate_Do_Table: | |
Replicate_Ignore_Table: | |
Replicate_Wild_Do_Table: | |
Replicate_Wild_Ignore_Table: | |
Last_Errno: 0 | |
Last_Error: | |
Skip_Counter: 0 | |
Exec_Master_Log_Pos: 154 | |
Relay_Log_Space: 154 | |
Until_Condition: None | |
Until_Log_File: | |
Until_Log_Pos: 0 | |
Master_SSL_Allowed: No | |
Master_SSL_CA_File: | |
Master_SSL_CA_Path: | |
Master_SSL_Cert: | |
Master_SSL_Cipher: | |
Master_SSL_Key: | |
Seconds_Behind_Master: NULL | |
Master_SSL_Verify_Server_Cert: No | |
Last_IO_Errno: 0 | |
Last_IO_Error: | |
Last_SQL_Errno: 0 | |
Last_SQL_Error: | |
Replicate_Ignore_Server_Ids: | |
Master_Server_Id: 0 | |
Master_UUID: | |
Master_Info_File: /var/lib/mysql/master.info | |
SQL_Delay: 0 | |
SQL_Remaining_Delay: NULL | |
Slave_SQL_Running_State: | |
Master_Retry_Count: 86400 | |
Master_Bind: | |
Last_IO_Error_Timestamp: | |
Last_SQL_Error_Timestamp: | |
Master_SSL_Crl: | |
Master_SSL_Crlpath: | |
Retrieved_Gtid_Set: | |
Executed_Gtid_Set: | |
Auto_Position: 0 | |
Replicate_Rewrite_DB: | |
Channel_Name: | |
Master_TLS_Version: | |
1 row in set (0.00 sec) | |
ERROR: | |
No query specified | |
mysql> unlock tables; | |
Query OK, 0 rows affected (0.00 sec) | |
mysql> start slave; | |
Query OK, 0 rows affected (0.00 sec) | |
mysql> |
6、关闭掉主数据库的读取锁定
mysql> unlock tables;
- 1
7、在主数据库中创建一个表以及添加数据测试
本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-11/148524.htm
