运维相关之MySQL主从搭建

简介:MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一
集群模式:

    1) Mysql主从架构
    2) MHA 架构
    3) MMM 架构
    4) DRBD 架构

主从安装步骤:
    #以下步骤在所有集群服务器上都要做
    1.删除原有的mariadb
    查询:  rpm -qa|grep mariadb
    卸载:  rpm -e --nodeps mariadb-libs
    
    2.在https://dev.mysql.com/downloads/mysql/选择为Red Hat Enterprise Linux 7 / Oracle Linux 7 ,把os的版本选择为all。
    直接下载mysql-5.7.21-1.el7.x86_64.rpm-bundle.tar,所有的rpm包都在里面
    解压安装:
    tar -xvf mysql-5.7.21-1.el7.x86_64.rpm-bundle.tar
    解压后按顺序安装:
    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-devel-5.7.21-1.el7.x86_64.rpm
    rpm -ivh mysql-community-libs-compat-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
    
    3.修改配置文件,vim /etc/my.cnf
    [mysqld]
    #max_allowed_packet 参数限制
    max_allowed_packet = 100M
    # 此参数必须要设置,建议为总内存的70%,否则很容易挂掉的。
    innodb_buffer_pool_size = 1024M
    # 1 :不区分大小写,0:大小写敏感,Linux系统必须设置
    lower_case_table_names = 1
    # sql_mode 用于MySQL的校验严格(还是宽松)
    # ONLY_FULL_GROUP_BY:   严格校验Group By语法
    # STRICT_TRANS_TABLES:  在该模式下,如果一个值不能插入到一个事务表中,则中断当前的操作,对非事务表不做限制
    # PIPES_AS_CONCAT:   将"||"视为字符串的连接操作符而非或运算符,这和Oracle数据库是一样的,也和字符串的拼接函数Concat相类似
    sql_mode=ONLY_FULL_GROUP_BY,NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
    # 关闭自动提交,启用事务  0是开启事务 1关闭事务
    autocommit=0
    # 开启归档(binlog)日志
    log_bin=ON
    log_bin_basename=/var/lib/mysql/mysql-bin
    log_bin_index=/var/lib/mysql/mysql-bin.index
    # 超过30天的binlog删除
    expire_logs_days = 30
    # 最大连接数
    max_connections = 1000
    # 限制Innodb能打开的表的数据,如果库里的表特别多的情况,请增加这个。这个值默认是300
    innodb_open_files = 600
    # ---------- 以上内容必须配置 ------------------
    # ---------- 以下内容选配 ----------------------
    # 记录慢查询日志
    slow_query_log = 1
    long_query_time = 5 # 慢查询时间 超过5秒则为慢查询
    slow_query_log_file = /data/mysql/mysql-slow.log
    # 排序规则
    collation_server=utf8_general_ci
    # 数据库字符集
    character-set-server=utf8
    # 超时时间设定为21天
    wait_timeout=1814400    
    
    4.设置mysql开机自启
    systemctl enable mysqld
    systemctl start mysqld
    
    5.首次登陆MySQL
    #安装后第一次登陆MySQL,会自动生成密码,可在MySQL日志文件搜索password关键字得到密码
    mysql -uroot -p密码
    #设置密码的验证强度等级,设置为 最低6 位的密码
    mysql> set global validate_password_policy=LOW;
    mysql> set global validate_password_length=6;
    #修改root密码
    mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
    
    6.添加远程登录用户
    #默认只允许root帐户在本地登录,如果要在其它机器上连接mysql,必须修改root允许远程连接,或者添加一个允许远程连接的帐户,为了安全起见,添加一个新的帐户
    mysql> GRANT ALL PRIVILEGES ON *.* TO '新用户名'@'%' IDENTIFIED BY '密码' WITH GRANT OPTION;
    
    7.配置主从集群
    #主库配置文件
    vim /etc/my.cnf
    [mysqld]
    log-bin=mysql-bin
    server-id=101
    
    #备库配置文件
    vim /etc/my.cnf
    [mysqld]
    log-bin=mysql-bin
    server-id=102
    
    8.主库创建同步用户
    mysql> SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
    mysql> GRANT REPLICATION SLAVE ON *.* to 'backup'@'%' identified by '12345678';
    # show master status查看主库状态
    
    9.备库设置同步
    mysql> SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
    mysql> change master to master_host='192.168.56.101',master_user='backup',master_password='12345678',master_log_file='mysql-bin.000003',master_log_pos=2500;    
    # master_host为docker的地址不能写127.0.0.1 master_user是在主库创建的用户 master_log_pos是主库show master status;查询出的Position
    mysql> start slave; #启动备库
    
    10.查看服务状态
    mysql> show slave status\G
    # Waiting for master to send event 就是成功了
    # Connecting to master 多半是连接不通
    # 之后主库的修改都能同步到从库了
    
    11.开启慢查询日志记录
    [mysqld]
    slow_query_log = ON  #开启慢查询
    slow_query_log_file = /usr/local/mysql/data/slow.log  #日志文件地址
    long_query_time = 3  #超过3秒的就会记录
    log_queries_not_using_indexes=1      #记录没有索引的查询
    #配置后需要重新启动mysql,在主库上操作,重启主库即可,不用管备库
    #查看慢查询是否开启
    show variables  like '%slow_query_log%';
    
    12. 创建数据库、用户并授权
    CREATE DATABASE IF NOT EXISTS zjgcjs_v4 DEFAULT CHARACTER SET utf8;
    create user 'testdb'.* to 'test'@'%' identified by '1234';
    grant all privileges on 'testdb'.* to 'test'@'%' identified by '1234';
    
    13. mysql连接数
    #查看连接数,Threads_connected为当前已连接会话,Threads_running代表当前活动会话
    show status like '%connect%';
    show status like 'Threads%';
    show variables like '%max_connections%';
    #显示连接会话
    show processlist;
    
    14.mysql字符集
    #显示表的字符集,排序规则:_ci结尾表示大小写不敏感,_cs结尾表示大小写敏感
    SQL > SHOW CREATE TABLE runoob_ctl;
    #查看字段编码
    SHOW FULL COLUMNS FROM runoob_ctl;
    #把表默认的字符集和所有字符列(CHAR,VARCHAR,TEXT)改为新的字符集
    ALTER TABLE at_dict_group CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
    #查看数据库的排序规则
    SQL> SHOW VARIABLES LIKE 'collation\_%'
    #修改排序规则,vim /etc/my.cnf    
    [mysqld]
    # 排序规则
    collation_server=utf8_general_ci
    
    15.锁相关
    #查看锁超时时间,当前,全局
    mysql> SHOW VARIABLES LIKE "innodb_lock_wait_timeout";
    mysql> SHOW GLOBAL VARIABLES LIKE "innodb_lock_wait_timeout";
    #查看当前的事务,解锁 kill 线程号,kill trx_mysql_thread_id
    mysql> SELECT * FROM INFORMATION_SCHEMA.INNODB_TRX\G
    #查看正在锁的事务
    SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS;
    #查看等待锁的事务
    mysql> SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS;
    #查看表被锁状态
    show OPEN TABLES where In_use > 0; 
    #显示线程运行状态
    mysql> SHOW PROCESSLIST;
    
    16.缓存相关
    #查询缓存大小
    sql> show global variables like 'innodb_buffer_pool_size';
    #设置大小,MySQL5.7及以后版本,改参数时动态的,修改后,无需重启MySQL
    set global innodb_buffer_pool_size = 500M  #设置500M
    #配置文件修改
    [mysqld]
     innodb_buffer_pool_size = 500M

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值