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 ...
随机推荐
- VS开发ArcEngine时的一个异常信息——“ArcGIS version not specified. You must call RuntimeManager.Bind before creating any ArcGIS components.”
问题描述:程序报错“ArcGIS version not specified. You must call RuntimeManager.Bind before creating any ArcGIS ...
- mysql通过TEXT字段进行关联的优化方案
mysql如果通过超长的字段进行on关联,会导致效率很低,7k关联1.4k,结果为30+W的数据量,执行时间高达50秒. 将这个字段进行md5,然后再通过md5后的值进行关联,执行效率会大大优化,同样 ...
- oracle函数 add_months(d1,n1)
[功能]:返回在日期d1基础上再加n1个月后新的日期. [参数]:d1,日期型,n1数字型 [返回]:日期
- oracle选择最有效率的表名顺序
ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,因此FROM子句中写在最后的表(基础表 driving table)将被最先处理. 在FROM子句中包含多个表的情况下,你必须选择记录条 ...
- @总结 - 10@ Miller-Rabin素性测试与Pollard-Rho因数分解
目录 @1 - 素性测试:Miller-Rabin算法@ @1.1 - 算法来源@ @1.2 - 算法描述@ @1.3 - 算法实现@ @2 - 因数分解:Pollard-Rho算法@ @2.0 - ...
- 全文索引——CONTAINS 语法
Like直接在数据据中查找可以查到所有所需记录但是会扫描整个表会影响性能CONTAINS是基于全文索引进行查询,查询结果受系统全文索引分词的方法影响查询结果会不全.Select * FROM A Wh ...
- 基于LIVE555的RTSP QoS实现
如何从OnDemandServerMediaSubsession类以及继承类对象中获取RTCP信息(句柄) OnDemandServerMediaSubsession.cpp void StreamS ...
- pytorch adam 源码 关于优化函数的调整 optimizer 调参 重点
关于优化函数的调整拆下包:https://ptorch.com/docs/1/optim class torch.optim.Optimizer(params, defaults)所有优化的基类. 参 ...
- UVA 3027 Corporative Network 带权并查集、
题意:一个企业要去收购一些公司把,使的每个企业之间互联,刚开始每个公司互相独立 给出n个公司,两种操作 E I:询问I到I它连接点最后一个公司的距离 I I J:将I公司指向J公司,也就是J公司是I公 ...
- windows下如何安装Composer?
Composer 不是一个包管理器,它仅仅是一个依赖管理工具.它涉及 "packages" 和 "libraries",但它在每个项目的基础上进行管理,在你项目 ...