mysql的主从配置
1、主从简介
在现代企业中,数据库显得尤为重要,而储存数据的数据库选择的五花八门,但任何数据库都存在着一种隐患。
想几个问题:
- 用一台服务器存放数据,若此数据库服务器出问题导致数据库丢失怎么办?
- 业务量大了,数据多了,访问人多了,一台数据库无法保证服务器质量怎么办?
1.1、主从作用
- 实时灾备,用于故障切换
- 读写分离,提供查询服务
- 备份,避免影响业务
1.2、主从形式
- 一主多从
- 主主复制
- 一主多从
- 多主一从
- 联级复制
2、主从复制原理
主从复制步骤:
- 主库将所有的写操作记录到binlog日志中并且生成一个log dumo线程,将binlog日志传给从数据库的I/O线程
- 从数据库生成两个线程,一个SQL线程,一个I/O线程
- I/O线程去请求主库的binlog,并且将得到的binlog日志写道reay log(中继日志)文件中
- SQL线程会读取relay log文件日志中,并且解析具体操作,来实现组从一致。
3、主从复制配置
配置步骤:
- 确保主从数据库数据一样
- 在主数据库里面创建一个同步账号授权给从库
- 配置主数据库(配置文件)
- 配置从数据库(配置文件)
准备两台数据库:
数据库角色 | IP | 应用系统版本 | 有无数据 |
---|---|---|---|
主数据库 | 192.168.7.10 | radhat7 | 无 |
从数据库 | 192.168.7.11 | radhat7 | 无 |
数据库安装步骤省略。。。。。
3.1、主从一致
主服务器
# mysqldump -uroot -p123 --all-databases > all.sql
# scp all.sql root@192.168.7.11
从服务器
# ls
all.sql
# mysql -uroot -p123 < all.sql
3.2、主数据库创建同步账号
mysql> CREATE USER ‘repl‘@‘192.168.7.11‘ IDENTIFIED BY ‘repl123‘
mysql> GRANT REPLICATION SLAVE ON *.* TO ‘repl‘@‘192.168.7.11‘;
mysql> GRANT REPLICATION SLAVE ON *.* TO ‘repl‘@‘192.168.7.11‘;
3.3、修改主数据库配置文件
# vim /etc/my.cnf
[mysqld]
basedir = /usr/local/mysql
datadir = /opt/data
socket = /tmp/mysql.sock
port = 3306
pid-file = /opt/data/mysql.pid
user = mysql
symbolic-links=0
log-error=/var/log/mysqld.log
server-id=1
log-bin=mysql-bin
skip-name-resolve
# service mysqld restart
# mysql -uroot -p123
mysql> show master status; //数据库状态
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000002 | 154 | | | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
mysql>
3.4、配置从数据库
# vim /etc/my.cnf
[mysqld]
basedir = /usr/local/mysql
datadir = /opt/data
socket = /tmp/mysql.sock
port = 3306
pid-file = /opt/data/mysql.pid
user = mysql
server-id=2
relay-log=mysql-relay-bin
symbolic-links=0
log-error=/var/log/mysqld.log
skip-name-resolve
# service mysqld restart
# mysqld -uroot -p123
//配置启动从数据库
mysql> CHANGE MASTER TO
-> MASTER_HOST=‘192.168.7.11‘;
-> MASTER_USER=‘repl‘,
-> MASTER_PASSWORD=‘repl123‘,
-> MASTER_LOG_FILE=‘mysql-bin.000002‘,
-> MASTER_LOG_POS=154;
mysql> start slave;
mysql> show slave status \G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.7.11
Master_User: lzj
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000002
Read_Master_Log_Pos: 154
Relay_Log_File: mysql-relay-bin.000008
Relay_Log_Pos: 367
Relay_Master_Log_File: mysql-bin.000002
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
效果:
主mysql
从mysql