实验环境

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主从之配置基本环境的更多相关文章

  1. mysql主从同步配置(windows环境)

    mysql主从同步配置(mysql5.5,windows环境)   A主机(作为主服务器)环境:windows8.mysql5.5 ip:192.168.1.100(自己填) B主机(作为从服务器,由 ...

  2. MySQL主从架构配置

    MySQL主从架构配置有两台MySQL数据库服务器master和slave,master为主服务器,slave为从服务器,初始状态时,master和slave中的数据信息相同,当master中的数据发 ...

  3. Mysql主从安装配置

    Mysql主从安装配置   环境: 主从服务器上的MySQL数据库版本同为5.1.34 主机IP:192.168.0.1 从机IP:192.168.0.2  一. MySQL主服务器配置 1.编辑配置 ...

  4. Docker Mysql主从同步配置搭建

    Docker Mysql主从同步配置搭建 建立目录 在虚拟机中建立目录,例如路径/home/mysql/master/data,目录结构如下: Linux中 新建文件夹命令:mkdir 文件夹名 返回 ...

  5. MySQL主从备份配置实例

    转载自:https://www.cnblogs.com/ahaii/p/6307648.html MySQL主从备份配置实例 场景: 1.主服务器192.168.0.225.从服务器192.168.0 ...

  6. centos:mysql主从同步配置(2018)

    centos:mysql主从同步配置(2018) https://blog.csdn.net/liubo_2016/article/details/82379115 主服务器:10.1.1.144; ...

  7. MySQL 主从架构配置详解

    无论是哪一种数据库,数据的安全都是至关重要的,因此熟练掌握数据库的安全备份功能,是作为开发人员,特别是后端开发人员的一项必备技能.MySQL 数据库内建的复制功能,可以帮助我们对数据进行异地备份,读写 ...

  8. MySQL主从及主主环境部署

    主从同步 主机环境 mysql的安装可以参考:https://www.cnblogs.com/brianzhu/p/8575243.htmlCentos7版本master:192.168.192.12 ...

  9. mysql主从之配置验证

    实验环境: master  192.168.132.121 主库 slave     192.168.132.122 从库 一 mysql主从复制的配置 1.1 mysql主库给从库复制的权限 mys ...

随机推荐

  1. oralce GROUPING SETS

    select id,area,stu_type,sum(score) score from students group by grouping sets((id,area,stu_type),(id ...

  2. TCP/IP,UDP,HTTP,SOCKET之间的区别和关系

    TCP/IP TCP/IP代表传输控制协议/网际协议,指的是一系列协组.可分为四个层次:数据链路层.网络层.传输层和应用层. 在网络层:有IP协议.ICMP协议.ARP协议.RARP协议和BOOTP协 ...

  3. iptables SNAT与伪装

    Source NAT(SNAT)的主要應用,是让同一內部網路上的多部主机,可共用同一条Internet实体连線.直接与Internet相连的闸道器,可使用SNAT(搭配连線追蹤)来来改写內部网络与In ...

  4. 我爱自然语言处理bert ner chinese

    BERT相关论文.文章和代码资源汇总 4条回复 BERT最近太火,蹭个热点,整理一下相关的资源,包括Paper, 代码和文章解读. 1.Google官方: 1) BERT: Pre-training ...

  5. 排他网关(ExclusiveGateWay)

    网关(ExclusiveGateWay) 作者:邓家海2018年3月11日 00:13:25 情景:某一家公司最近在给一个单位做一个财务审批的OA.具体需求是这样的:当部门申请的金额小于一万块的时候, ...

  6. [ Laravel 5.1 文档 ] 服务 —— 帮助函数

    http://laravelacademy.org/post/205.html 1.简介 Laravel自带了一系列PHP帮助函数,很多被框架自身使用,然而,如果你觉得方便的话也可以在应用中随心所欲的 ...

  7. windows/Linux/Mac下安装maven,maven作用

    Linux下安装maven 1.首先到Maven官网下载安装文件,目前最新版本为3.0.3,下载文件为apache-maven-3.3.9-bin.tar.gz,下载可以使用wget命令: 2.进入下 ...

  8. Activity学习(一):生命周期

    一. 认识Activity Activity是Android的四大组件之一,那么它是什么呢?如果简单的理解,可以把它当成应用的一个显示的屏幕. Activity类处于android.app包中,继承体 ...

  9. PHP用正则批量替换Img中src内容,用正则表达式获取图片路径实现缩略图功能

    PHP用正则批量替换Img中src内容,用正则表达式获取图片路径实现缩略图功能 网上很多正则表达式只能获取或者替换一个img的src内容,或者只能替换固定的字符串,要动态替换多个图片内容的试了几个小时 ...

  10. Python--day42--mysql操作数据库及数据表和基本增删改查

    sql语法规则: 一.操作文件夹 1.创建数据库db2:create database db2; 2.创建数据库db2并标明数据库的编码格式为utf8:create database db2 defa ...