mysql主从之配置基本环境
实验环境
master 192.168.132.121 主库
slave 192.168.132.122 从库
一 mysql的使用介绍
1.1 mysql单台服务器特点
缺点
单台服务器如果磁盘出现问题的话,数据库数据就会丢失
单台服务器的备份,如果把数据文件备份到本地的话,难以自动定期备份
单台服务器无法应对高并发的读,只有单台的话,读写都在同一台,数据压力大
优点
数据不会出现不一致的现象
维护简单
1.2 mysql单台服务器推荐方法
如果确实只有单台服务器的话,可考虑采用单台服务器 + 云快照或者云存储
1.3 mysql多台服务器实现主从复制特点
主从复制优点
多台服务器实现正常的主从复制后,多台服务器的mysql数据一致,数据丢失可能性小
高并发的读压力可以分配到多台服务器上
主从复制缺点
复制出问题或者写量比较大的时候,数据可能会不一致
主从复制维护比较麻烦
1.4 主从复制原理
mysql主从复制原理 binlog
mysql主从复制依赖于mysql二进制日志文件,主mysql服务器会生成二进制日志文件,传递给从服务器执行
mysql从库同步有两个进程,一个io进程用来同步binlog,一个sql进程用来执行relaylog(中继日志)里的数据
目前mysql主从架构还是比较常见的,数据的重要性
1.5 复制步骤
整体上来说,复制有3 个步骤:
(1)master 将改变记录到二进制日志(binary log)中(这些记录叫做二进制日志事件,binary log events);
(2)slave 将master 的binary log events 拷贝到它的中继日志(relay log);
(3)slave 重放中继日志中的事件,将改变反映它自己的数据。
1.6 复制架构
Datagaurd 主读写,备读不能写
1.从服务器作为主服务器的实时数据备份
2.主从服务器实时读写分离,从服务器实现负载均衡
3.把多个从服务器根据业务重要性进行拆分访问
1.7 MySQL 主从复制企业应用场景:
1. 从服务器作为主服务器的实时数据备份
当主服务器出现问题时,我们可以人工或设置自动切换到从服务器继续提供服务,此时从服务器的数据和宕机时的主数据库几乎是一致的。
对于人为地执行drop、delete 等语句删除数据的情况,从库的备份功能就没有用了,因为从服务器也会执行删除的语句。
2. 主从服务器实时读写分离,从服务器实现负载均衡
主从服务器架构可通过程序(Javaweb 等)或代理软件(mysql‐proxy、mycat 等)实现对用户(客户端)的请求读写分离,即让从服务器仅仅处理用户的select 查询请求,降低用户查询响应时间及读写同时在主服务器上带来的访问压力。对于更新的数据(例如update、insert、delete 语句)仍然交给主服务器处理,确保主服务器和从服务器保持实时同步。
3. 把多个从服务器根据业务重要性进行拆分访问可以把几个不同的从服务器,根据公司的业务进行拆分。
二 mysql主库的配置
2.1 先对数据初始化,生成密码
[root@master ~]# mysqld --initialize --user=mysql
[root@master ~]# grep "password" /var/log/mysqld.log
--03T15::.068299Z [Note] A temporary password is generated for root@localhost: 0JlLA_qy1V:=
2.2 启动MySQL
[root@master ~]# systemctl start mysqld
[root@master ~]# netstat -ntlp
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0.0.0.0: 0.0.0.0:* LISTEN /sshd
tcp6 ::: :::* LISTEN /sshd
tcp6 ::: :::* LISTEN /mysqld
2.3 修改配置
需要新增二进制日志binlog配置
[root@master ~]# vim /etc/my.cnf
[mysqld]
bind-address=0.0.0.0
port=
datadir=/data/mysql
socket=/data/mysql/mysql.sock
user=mysql
skip-name-resolve
slow_query_log=on
long_query_time=
slow_query_log_file=/data/mysql/mysql-slow.log
innodb-file-per-table=
innodb_flush_log_at_trx_commit =
log_warnings =
connect_timeout =
net_read_timeout =
performance_schema_max_table_instances =
server-id =
log-bin=master-bin #开启二进制日之
log-bin-index = master-bin.index #二进制日志的索引目录 [mysqld_safe]
log-error=/data/mysql/mysqld.log
pid-file=/data/mysql/mysqld.pid
server-id #binlog配置需要给mysql服务器设置id用来标识mysql服务器,每个mysql服务器都有不一样的id。从1开始标识
log-bin #开启binlog,mysql主服务器都需要开启
log-bin-index #binlog存放到文件里面,index里面存放着binlog的文件名
2.4 创建数据目录
[root@master ~]# mkdir -pv /data/mysql
[root@master ~]# chown mysql:mysql /data/mysql/
2.5 重启服务,并验证
[root@master ~]# systemctl start mysqld
报错机排错,查看日志,错误日志如下
--03T15::.203843Z [ERROR] InnoDB: Operating system error number in a file operation.
--03T15::.203862Z [ERROR] InnoDB: The error means mysqld does not have the access rights to the directory.
--03T15::.203871Z [ERROR] InnoDB: os_file_get_status() failed on './ibdata1'. Can't determine file permissions
--03T15::.203886Z [ERROR] InnoDB: Plugin initialization aborted with error Generic error
--03T15::.808009Z [ERROR] Plugin 'InnoDB' init function returned error.
--03T15::.808138Z [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
--03T15::.808162Z [ERROR] Failed to initialize builtin plugins.
--03T15::.808172Z [ERROR] Aborting
显示是没有权限,但是已经开启了/data/mysql的权限
关掉selinux,在启动,成功,是selinux的问题
[root@master ~]# getenforce
Enforcing
[root@master ~]# setenforce
[root@master ~]# getenforce
Permissive
[root@master ~]# systemctl start mysqld
验证启动
[root@master ~]# netstat -ntlp|grep mysql
tcp 0.0.0.0: 0.0.0.0:* LISTEN /mysqld
使用密码不能登陆
[root@master src]# mysql -uroot -h localhost -p0JlLA_qy1V:=
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2) #这个socket不在
[root@master src]# ll /data/mysql/
total
-rw-r-----. mysql mysql Jul : auto.cnf
-rw-r-----. mysql mysql Jul : ib_buffer_pool
-rw-r-----. mysql mysql Jul : ibdata1
-rw-r-----. mysql mysql Jul : ib_logfile0
-rw-r-----. mysql mysql Jul : ib_logfile1
-rw-r-----. mysql mysql Jul : ibtmp1
-rw-r-----. mysql mysql Jul : master-bin.
-rw-r-----. mysql mysql Jul : master-bin.
-rw-r-----. mysql mysql Jul : master-bin.index
drwxr-x---. mysql mysql Jul : mysql
-rw-r-----. mysql mysql Jul : mysql-slow.log
srwxrwxrwx. mysql mysql Jul : mysql.sock #查看在这里
-rw-------. mysql mysql Jul : mysql.sock.lock
drwxr-x---. mysql mysql Jul : performance_schema
drwxr-x---. mysql mysql Jul : sys
[root@master src]# ln -s /data/mysql/mysql.sock #做一个软连接,成功
mysql.sock mysql.sock.lock
[root@master src]# ln -s /data/mysql/mysql.sock /var/lib/mysql/mysql.sock
[root@master src]# mysql -uroot -h localhost -p0JlLA_qy1V:=
查看数据库,提示必须改密码
mysql> show databases;
ERROR (HY000): You must reset your password using ALTER USER statement before executing this statement.
修改密码
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '';
Query OK, rows affected (0.00 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
rows in set (0.00 sec)
验证成功
三 启动从库
方式相同
3.1 mysql从库新增中继日志relaylog配置
[mysqld]
bind-address=0.0.0.0
port=
datadir=/data/mysql
socket=/data/mysql/mysql.sock
user=mysql
skip-name-resolve
slow_query_log=on
long_query_time=
slow_query_log_file=/data/mysql/mysql-slow.log
innodb-file-per-table=
innodb_flush_log_at_trx_commit =
log_warnings =
connect_timeout =
net_read_timeout =
performance_schema_max_table_instances =
server-id =
relay-log = relay-log
relay-log-index = relay-log.index [mysqld_safe]
log-error=/data/mysql/mysqld.log
pid-file=/data/mysql/mysqld.pid
配置说明
server-id #每台mysql服务器的标识需要不一样
relay-log #从库需要开启relay-log,中继日志
relay-log-index #relaylog也放到文件里面,index里存放着relaylog的文件名
3.2 启动mysql从库
[root@slave ~]# mkdir -pv /data/mysql
mkdir: created directory ‘/data’
mkdir: created directory ‘/data/mysql’
[root@slave ~]# chown mysql:mysql /data/mysql
[root@slave ~]# getenforce
Enforcing
[root@slave ~]# setenforce
[root@slave ~]# getenforce
Permissive
[root@slave ~]# mysqld --initialize --user=mysql
--03T15::.701329Z [Warning] The syntax '--log_warnings/-W' is deprecated and will be removed in a future release. Please use '--log_error_verbosity' instead.
--03T15::.701519Z [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
--03T15::.241974Z [Warning] InnoDB: New log files created, LSN=
--03T15::.327038Z [Warning] InnoDB: Creating foreign key constraint system tables.
--03T15::.398579Z [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: 141defd2-9dab-11e9-8fe3-000c2963fd11.
--03T15::.401121Z [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened.
--03T15::.426433Z [Note] A temporary password is generated for root@localhost: xJ,RO+8krdGB
[root@slave ~]# systemctl start mysqld
[root@slave ~]# mysql -u root -pxJ,RO+8krdGB
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
[root@slave ~]# ln -s /data/mysql/mysql.sock /var/lib/mysql/mysql.sock
[root@slave ~]# mysql -u root -pxJ,RO+8krdGB
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
......
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> show databases;
ERROR (HY000): You must reset your password using ALTER USER statement before executing this statement.
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '';
Query OK, rows affected (0.00 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
rows in set (0.00 sec)
mysql> exit
从库配置完成
两台数据库独立的,但binlog文件已经有,由于主从还没有搭建,所以还没有relaylog
3.3 二进制日志
查看日志状态
show variables like '%log_bin%';
mysql> show variables like '%log_bin%';
+---------------------------------+------------------------------+
| Variable_name | Value |
+---------------------------------+------------------------------+
| log_bin | ON | #开启状态
| log_bin_basename | /data/mysql/master-bin |
| log_bin_index | /data/mysql/master-bin.index |
| log_bin_trust_function_creators | OFF |
| log_bin_use_v1_row_events | OFF |
| sql_log_bin | ON |
+---------------------------------+------------------------------+
[root@master ~]# ll /data/mysql/
master-bin.index记录的日志名字
[root@master ~]# cat /data/mysql/master-bin.index
mysql主从之配置基本环境的更多相关文章
- mysql主从同步配置(windows环境)
mysql主从同步配置(mysql5.5,windows环境) A主机(作为主服务器)环境:windows8.mysql5.5 ip:192.168.1.100(自己填) B主机(作为从服务器,由 ...
- MySQL主从架构配置
MySQL主从架构配置有两台MySQL数据库服务器master和slave,master为主服务器,slave为从服务器,初始状态时,master和slave中的数据信息相同,当master中的数据发 ...
- Mysql主从安装配置
Mysql主从安装配置 环境: 主从服务器上的MySQL数据库版本同为5.1.34 主机IP:192.168.0.1 从机IP:192.168.0.2 一. MySQL主服务器配置 1.编辑配置 ...
- Docker Mysql主从同步配置搭建
Docker Mysql主从同步配置搭建 建立目录 在虚拟机中建立目录,例如路径/home/mysql/master/data,目录结构如下: Linux中 新建文件夹命令:mkdir 文件夹名 返回 ...
- MySQL主从备份配置实例
转载自:https://www.cnblogs.com/ahaii/p/6307648.html MySQL主从备份配置实例 场景: 1.主服务器192.168.0.225.从服务器192.168.0 ...
- centos:mysql主从同步配置(2018)
centos:mysql主从同步配置(2018) https://blog.csdn.net/liubo_2016/article/details/82379115 主服务器:10.1.1.144; ...
- MySQL 主从架构配置详解
无论是哪一种数据库,数据的安全都是至关重要的,因此熟练掌握数据库的安全备份功能,是作为开发人员,特别是后端开发人员的一项必备技能.MySQL 数据库内建的复制功能,可以帮助我们对数据进行异地备份,读写 ...
- MySQL主从及主主环境部署
主从同步 主机环境 mysql的安装可以参考:https://www.cnblogs.com/brianzhu/p/8575243.htmlCentos7版本master:192.168.192.12 ...
- mysql主从之配置验证
实验环境: master 192.168.132.121 主库 slave 192.168.132.122 从库 一 mysql主从复制的配置 1.1 mysql主库给从库复制的权限 mys ...
随机推荐
- C++第一次作业(循环语句的使用)
一.知识点 循环结构 二.教学目的 掌握while和do...while循环语句在C++中的写法 三.教学内容 1.while语句 (1)执行顺序:先判断表达式(循环控制条件)的值,若表达式的值为tr ...
- 行为面试法(STAR)
从过去的行为预测未来,是一种提问技巧. 情景 : Situation 当时怎么了 当时你所在团队主要销售任务是什么目标 : Task 你要干什么 当时你的销售业绩是多少行动 : Action 你都干了 ...
- 洛谷P2330 [SCOI2005]繁忙的都市
#include<bits/stdc++.h> using namespace std; ; ; int n,k,Max,tot; struct node{ int cnt,fa; }f[ ...
- oracle函数 REPLACE(c1,c2[,c3])
[功能]将字符表达式值中,部分相同字符串,替换成新的字符串 [参数] c1 希望被替换的字符或变量 c2 被替换的字符串 c3 要替换的字符串,默认为空(即删除之意,不是空格) [返回]字 ...
- NSDate 格式化含有毫秒
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss.SSS"]; 版权声明:本文为博主原创文章,未经博主允许不得转载.
- cesium 基础
scaleByDistance : new Cesium.NearFarScalar(1.5e2, 1.5, 8.0e6, 0.0),--(近值,近端放大率,远值,远端放大率) 给定距离视点的近值和远 ...
- 深入理解iptables防火墙
0x00 Linux 安全性和 netfilter/iptables Linux 因其健壮性.可靠性.灵活性以及好象无限范围的可定制性而在 IT 业界变得非常受欢迎.Linux 具有许多内置的能力, ...
- 从 Apache ORC 到 Apache Calcite | 2019大数据技术公开课第一季《技术人生专访》
摘要: 什么是Apache ORC开源项目?主流的开源列存格式ORC和Parquet有何区别?MaxCompute为什么选择ORC? 如何一步步成为committer和加入PMC的?在阿里和Uber总 ...
- Cutting Bamboos 主席树+二分+前缀和
二分第x次砍的位置,然后用线段树查询小于这个位置的数的个数和值的和.然后判断即可 注意!!!主席树是通过动态开点实现的,本身已经不用再从1开始了,而本题开的范围也应该是0,100000 而不是1,10 ...
- js获取dom节点
var s= document.getElementById("test");del_ff(s); //清理空格var chils= s.childNodes; //得到s的全部子 ...