MYSQL主从同步是目前使用比较普遍的数据库架构,技术比较成熟,配置也不复杂,特别是对于负载比较大的网站,主从同步可以有效缓解数据库读写的压力。html
MYSQL主从同步是在MySQL主从复制(Master-Slave Replication)基础上实现的,经过设置在Master MySQL上的binlog(使其处于打开状态),Slave MySQL上经过一个I/O线程从Master MySQL上读取binlog,而后传输到Slave MySQL的中继日志中,而后Slave MySQL的SQL线程从中继日志中读取中继日志,而后应用到Slave MySQL的数据库中。这样实现了主从数据同步功能。mysql
一、能够做为一种备份机制,至关于热备份
二、能够用来作读写分离,均衡数据库负载sql
# 主要步骤: 1. 安装主数据库 2. 修改root帐号密码,root帐号远程登陆 3. 安装从数据库 4. 修改root帐号密码,root帐号远程登陆,密码和主数据库密码相同 5. 主数据库修改配置,添加server-id,添加bin-log文件 6. 主数据库建立同步帐号,指定内网ip能够访问,设定同步密码,使用从数据库链接主数据库测试连通性 7. 主数据库刷新表,锁住全部的表,查看master状态,记录bin-log文件和当前的定位编号 8. 使用mysqladmin备份数据库,没有数据能够忽略这一步,数据量大的状况下使用mysqldump来备份数据 9. 从数据库服务器配置server-id,将备份数据导入从服务器。开启binlog等配置 10. 从数据库修改配置,添加同步帐户信息以及bin-log文件和当前的定位编号 11. 开启同步,主数据库接触锁定。
一、二、三、4:单机安装mysql教程数据库
cd /app mkdir mysql cd mysql # 下载mysql的包,可使用服务器下载,也能够本地下载,上传到服务器上去 wget https://cdn.mysql.com//Downloads/MySQL-5.7/mysql-5.7.21-1.el7.x86_64.rpm-bundle.tar tar -xvf mysql-5.7.21-1.el7.x86_64.rpm-bundle.tar # 查看冲突版本软件 rpm -qa | grep redhat-lsb-core rpm -qa | grep postfix rpm -qa | grep mariadb # 卸载冲突版本软件 rpm -ev redhat-lsb-core-4.1-27.el7.centos.1.x86_64 rpm -ev postfix-2.10.1-6.el7.x86_64 rpm -ev mariadb-libs-5.5.56-2.el7.x86_64 # 安装依赖 yum install -y net-tools yum install -y libaio # 安装rpm,必定要按照顺序安装,遇到问题必定要查询问题,不可直接继续安装 rpm -ivh mysql-community-common-5.7.21-1.el7.x86_64.rpm rpm -ivh mysql-community-libs-5.7.21-1.el7.x86_64.rpm rpm -ivh mysql-community-client-5.7.21-1.el7.x86_64.rpm rpm -ivh mysql-community-server-5.7.21-1.el7.x86_64.rpm # 启动mysql systemctl start mysqld # 查看初始用户密码 grep password /var/log/mysqld.log # 使用mysql帐户登陆,修改初始化密码 mysql -p # 输入查看的密码 set password = password("Yingtong@2018!"); # 容许root用户远程链接 grant all privileges on *.* to root@'%' identified by 'Yingtong@2018!'; flush privileges; # 修改区分大小写的配置 vim /etc/my.cnf # 底部加入配置 lower_case_table_names=1 # 从新启动mysql systemctl restart mysqld # 使用客户端工具链接服务器
# 编辑,并使用:wq保存 vim /etc/my.cnf # 中止mysql systemctl stop mysql # 启动mysql systemctl start mysql # 若是启动遇到问题可有能够查看mysql启动日志,以及systemctl 启动日志 # mysql日志 tailf /var/log/mysqld.log # 系统日志 journalctl -xe
配置:/etc/my.cnf配置修改内容(主数据库)vim
# 添加serverid,注意必须与从数据库不相同 server-id=2 # 开启mysql-bin日志,使用默认数据目录:/var/lib/mysql/,使用其余目录会有问题 log-bin=/var/lib/mysql/mysql-bin # 开始mysql-replay-bin日志,使用默认数据目录 relay_log = /var/lib/mysql/relay-bin # 不区分大小写,项目中有些库使用大写区分,因此服务器上添加这个设定 lower_case_table_names=1
主数据库:centos
# 登陆主数据库服务器,输入密码进行登陆 mysql -p # 建立同步帐号,ip地址为从数据库ip地址,密码自行定义 GRANT REPLICATION SLAVE,RELOAD,SUPER ON *.* TO repl@'172.16.48.131' IDENTIFIED BY 'Repl@2018!'; # 使用户生效 FLUSH PRIVILEGES;
从数据库:服务器
# 使用mysql登陆 mysql -urepl -h172.16.48.129 -pRepl@2018! # 测试链接状况,成功链接上,说明建立的同步帐号没有问题
主数据库;架构
# 链接主数据库 mysql -p # 锁定数据库 flush tables with read lock; # 查询主数据库信息,记录bin-log文件和坐标 show master status; | File | Position | +------------------+----------+ | mysql-bin.000007 | 154
主数据库;app
# 建立备份文件夹目录 mkdir -p /app/mysqlbackup/ # 备份出文件,数据量小的状况 mysqldump -uroot -p'Yingtong@2018!' -S /var/lib/mysql/mysql.sock --all-databases > /app/mysqlbackup/mysql_bak.$(date +%F).sql # 备份出文件,数据量大的状况 mysqldump -uroot -p'Yingtong@2018!' -S /var/lib/mysql/mysql.sock --all-databases | gzip > /app/mysqlbackup/mysql_bak.$(date +%F).sql.gz # 从数据库可使用scp命令进行拷贝 scp -r root@172.16.48.129:/app/mysqlbackup/mysql_bak.2018-10-21.sql /app/mysqlbackup/
导入数据库配置ide
# 将备份数据导入从服务器 mysql -uroot -p'Yingtong@2018!' -S /var/lib/mysql/mysql.sock < /app/mysqlbackup/mysql_bak.2018-10-21.sql # 修改从服务器数据库配置 vim /etc/my.cnf # 从新启动数据库 systemctl stop mysqld systemctl start mysqld
配置:/etc/my.cnf配置修改内容(从数据库)
# 服务id server-id=1 # 开启mysql-binlog日志 log_bin = /var/lib/mysql/mysql-bin # 开始mysql-relay日志 relay_log = /var/lib/mysql/relay-bin # 设定日志的格式化 binlog-format = row # 设定从库的日志更新 log-slave-updates = true # 设定只读 read_only = 1 # 设定数据库不区分大小写 lower_case_table_names = 1
# 从数据库登陆mysql mysql -p # 设定同步帐号,输入前面步骤中的mysql的mysql-bin.000007,和坐标154 CHANGE MASTER TO MASTER_HOST='172.16.48.129', MASTER_USER='repl', MASTER_PASSWORD='Repl@2018!', MASTER_LOG_FILE='mysql-bin.000007', MASTER_LOG_POS=154 # 开启同步 start slave; # 查看同步状态:其中Slave_IO_Running: YES且Slave_SQL_Running: YES即为成功同步了 show slave status \G
# 主数据库 mysql -p # 解除锁定 unlock tables;
# 中止数据库同步 stop salve; # 中止同步线程 STOP SLAVE IO_THREAD