唐僧喜欢小龙女

导航

MySQL的运维学习

1、Mysql的安装

这里使用tar包的方式
	https://www.cnblogs.com/hanshuixin/articles/16887899.html
初始的默认密码: 
        tail -200f alert.log
        localhost@root: 后面的内容,就是本机root用户的初始密码,需要记录下来 *<!ckp29Ne=&

2、MySQL的日志

2.1、错误日志

错误日志是MySQL 中最重要的日志之一,它记录了当mysql启动和停止时,以及服务器在运行过程中发生任何严重错误时的相关信息。当数据库出现任何故障导致无法正常使用时,建议首先查看此日志
该日志时默认开启的,默认存放目录 /var/log,默认的日志文件名是 mysqld.log。可以通过以下的命令来看日志位置
show variables like "%log_error%"

2.2、二进制日志

定义
      二进制日志binlog 记录了所有DDL语句和DML语句,但不包括数据查询(select show)语句
作用
      1、灾难时的数据恢复
      2、MySQL的主从复制时用到
查看是否开启二进制日志
      show variables like "%log_bin%";
       看到是否开启binlog 日志
        #my.cnf中 加如下的内容
       log-bin=mysql-bin
      server_id=1
      binlog_format=ROW


docker 安装mysql 5.7 开启binlog
     docker run --name mysql -p 3306:3306 -v /Users/gaoheqiang/mysqlconf/mysqlconf/my.cnf:/etc/mysql/my.cnf -v /Users/gaoheqiang/mysqlconf/data:/var/lib/mysql -v /Users/gaoheqiang/mysqlconf/logs:/var/log/mysql -e MYSQL_ROOT_PASSWORD=root --restart=always -d mysql:5.7 --character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci 
日志格式
      STATEMENT
           基于SQL语句的日志记录,记录的是SQL语句,对数据进行修改的SQL都会记录在日志文件中
      ROW
           基于行的日志记录,记录的是每一行的数据变更(执行了一个update 语句,update 语句影响了 5行,binlog 日志记录的是每一行数据变更前的数据,变更后的数据信息)
     MIXED
           没啥用
查看日志格式
       show variables like "%binlog_format%";
日志内容查看
       msyqlbinlog 配置环境变量 
           vi ~/.bash_profile
           export PATH=$PATH:/usr/local/mysql/bin
           source ~/.bash_profile
       产看日志内容
           mysqlbinlog -d mybatis -v mysql-bin.000001 
           -v 把行事件 重构为SQL语句
           -d 指定数据库名称,只列出指定的数据库相关操作
二进制日志删除
  对于比较繁忙的业务系统,每天生成的binlog数据巨大,如果长时间不清除,将会占用大量的磁盘空间。
  reset master 删除全部 binlog日志。删除之后日志编号将从 000001开始
  purge master logs to binlog .***** 删除*****编号之前的所有日志
  purge master logs before 'yyyy-mm-dd hh mm ss' 删除日志为 某个日期之前 的 binlog日志

  这个命令需要在mysql客户端执行。

  MySQL 5.7 配置二进制日志的过期时间 重启生效

    expire_logs_days=30 

 2.3、查询日志

查询日志中记录了客户端的所有操作语句,默认情况下查询日志时未开启的。
	show variables like '%general%'
开启查询日志
	/etc/my.cnf 添加如下的内容
		general_log_file=/usr/local/mysql/log/general.log
		general_log=1
	重启mysql
		service mysqld restart

 2.4、慢查询日志

慢查询日志
    慢查询日志记录了所有执行时间超过参数 long_query_time 设置值并且扫描记录数不小于min_examined_row_limit
    的所有的SQL语句的日志,默认为开启。long_query_time 默认为10秒,最小为0 ,精度可以到微秒

    开启慢查询日志并设置慢查询的时间指标
        /etc/my.cnf 添加如下的内容
            [mysqld]
            slow_query_log=1
            # 慢查询日志文件名。默认值是host_name-slow.log,但可以通过slow_query_log_file选项更改初始值。
            slow_query_log_file=/usr/local/mysql/log/slow.log
            long_query_time=2

    记录执行较慢的未使用索引的查询日志
        log_queries_not_using_indexes=1

3、主从复制

3.1 什么是主从复制

主从复制是指将主数据库的DDL和DML操作通过二进制日志传到从库服务器中,
然后在从库上对这些日志重新执行(也叫重做),从而使得从库和主库的数据保持同步。
主库一般叫master 从库一般叫slave

3.2 主从复制的好处

1、如果主库宕机,数据库的连接可以切换到从库,降低对系统的影响
2、是开启读写分离的基础,有了从库后可以降低主库的压力
3、可以在从库中执行备份,以避免备份期间影响主库。备份时可能存在数据同步存在一定的延迟。

3. 3 主从复制的原理

1、Master 主库在事物提交时,会把数据变更记录在二进制的Binlog 中。
2、从库有两组线程一主叫IOThread 来和主库建立连接读取主库的binlog日志,读取后从到从库的中继日志叫Relay.log
3、从库中另一组线程叫SQLThread 来读取中继日志的变化然后插入到从库的表中
    这就是主从复制的原理    

3.4 主库和备库的搭建

    准备两个服务器 
        192.168.1.8(主) 
        192.168.1.130(备)

    关闭防火墙
        systemctl stop firewalld
        systemctl disable firewalld

    两台服务器分别安装好mysql
        https://www.cnblogs.com/gaohq/p/17323781.html

    主库配置
        修改配置文件 /etc/my.cnf
            #设置Mysql 服务id,保证整个集群环境中唯一,
            server-id=1
            #是否只读 1 代表只读,0代表读写
            read-only=0
            #忽略的数据,指不需要同步的数据库
            #binlog-ignore-db=mysql
            #指定同步的数据库,我们创建的数据库都需要同步
            #binlog-db=db01

        重启mysql 服务器
            service mysqld restart

        登陆mysql,创建远程连接的账号,并授予主从复制的权限
            #创建itcast 用户,并设置密码,该用户可在任意主机连接该MySQL服务,该账号就是从库来连接mysql的用户名和密码
            #用户itcast 可以在任意主机上访问当前的主机。
            create user 'itcast'@'%' identified with mysql_native_password by 'Root@123456';

            #为'itcast'@'%'用户分配主从复制权限
            grant replication slave on *.* to 'itcast'@'%';


        通过指令查看二进制日志坐标
            show master status;
                file: 从哪个日志文件开始推送日志文件给从库
                position: 从哪个位置开始推送日志


    从库配置
        修改配置文件 /etc/my.cnf
            #设置Mysql 服务id,保证整个集群环境中唯一,和主库不一样就行
            server-id=2
            #是否只读 1 代表只读,0代表读写,该设置只对普通管理员有效。超级管理员依然可以读写。
            read-only=1

        重启mysql
            service mysqld restart

        登陆从库的mysql,设置主库配置把从库和主库建立关联关系
            8.0.23中使用如下的语法
            change replication source to source_host='',source_user='',source_password='',source_log_file='',source_log_pos='';

            8.0.23以前的mysql版本使用如下的语法
            change master to master_host='192.168.1.8',master_user='itcast',master_password='Root@123456',master_log_file='mysql-bin.000032',master_log_pos=591;


        登陆从库的mysql,启动同步操作
            start replica;  8.0.23 之后
            start slave;    8.0.23 之前

        登陆从库的mysql,查看主从同步状态
            show replica status\G;    8.0.23 之后
            show slave status\G;         8.0.23 之前

                Slave_IO_Running: Yes
                Slave_SQL_Running: Yes
                这两个正常就就行

以上配置亲测没有问题

4、MySQL事务日志之redo log

 

 

 

 

posted on 2023-04-16 19:09  与时具进&不忘初心  阅读(26)  评论(0编辑  收藏  举报