linux下mysql的安装及主从复制(主从同步)

1 linux下安装MySQL

rpm安装方式。

1.1 mysql rpm包下载

  • 首先下载rpm安装包, mysql下载地址,找到你想要的版本
    MySQL-5.7/
    mysql-5.7.23-1.el6.x86_64.rpm-bundle.tar

1.2 移除已经安装的早期版本

  1. 使用以下命令查看当前安装mysql情况,查找以前是否装有mysql
    rpm -qa | grep -i mysql 
    
  2. 如果有查询结果,则说明之前安装了,如:
    MySQL-client-5.5.25a-1.rhel5
    MySQL-server-5.5.25a-1.rhel5
  3. 停止mysql服务、删除之前安装的mysql
    删除命令:
    rpm -e –nodeps 包名
    如: rpm -e –nodeps MySQL-client-5.5.25a-1.rhel5
    
    如果提示错误:error: %preun(xxxxxx) scriptlet failed, exit status 1,可尝试一下命令:
    rpm -e --noscripts MySQL-client-5.5.25a-1.rhel5
    
  4. 查找之前mysql的目录、并删除
    find / -name mysql
    rm -rf /var/lib/mysql
    
    注意:卸载后/etc/my.cnf不会删除,需要进行手工删除.
    rm -rf /etc/my.cnf
    
  5. 再次查找机器是否安装mysql,如果查询无结果,说明已经卸载彻底,接下来直接安装mysql即可。

1.3 linux mysql安装

  • 创建用户和组(如果已经创建则跳过)

    groupadd mysql 
    useradd -r -g mysql mysql 
    
  • 解压,得到几个压缩文件,如:
    mysql-devel 开发用到的库以及包含文件,
    mysql mysql 客户端,
    mysql-server 数据库服务器,

    tar -xvf mysql-5.7.23-1.el6.x86_64.rpm-bundle.tar
    
  • 依次安装
    rpm -ivh mysql-community-common-5.7.23-1.el6.x86_64.rpm
    rpm -ivh mysql-community-libs-5.7.23-1.el6.x86_64.rpm
    rpm -ivh mysql-community-client-5.7.23-1.el6.x86_64.rpm
    rpm -ivh mysql-community-server-5.7.23-1.el6.x86_64.rpm

    rpm -ivh mysql-community-server-5.7.23-1.el6.x86_64.rpm
    

    至此,mysql已经安装完成。
    上面几个包有依赖关系,执行有先后。

    使用rpm安装方式安装mysql,安装的路径如下:

    a 数据库目录
    /var/lib/mysql/
    b 配置文件
    /usr/share/mysql(mysql.server命令及配置文件)
    c 相关命令
    /usr/bin(mysqladmin mysqldump等命令)
    d 启动脚本
    /etc/rc.d/init.d/(启动脚本文件mysql的目录)

    e /etc/my.conf

  • 修改密码
    安装完后,使用命令service mysqld start启动MySQL服务。

    由于MySQL5.7.4之前的版本中默认是没有密码的,登录后直接回车就可以进入数据库,进而进行设置密码等操作。其后版本对密码等安全相关操作进行了一些改变,在安装过程中,会在安装日志中生成一个随机密码。

    查看临时密码:

    grep 'temporary password' /var/log/mysqld.log
    2018-10-28T16:43:10.889769Z 1 [Note] A temporary password is generated for root@localhost:hcLMTxbOh2?w
    

    这样我们得知临时密码是:hcLMTxbOh2?w。
    此时,使用MySQL生成的随机密码就能够正常登录:

    mysql -uroot -p hcLMTxbOh2?w
    

    登录成功后,请立即修改密码。

    如果没有修改密码,系统将会提示错误:在"ALTER USER"操作前不会执行其他操作;并且确保修改之后的密码的安全程度能够满足MySQL的要求。推荐数字、字母和特殊符号混用。

    执行以下操作配置root用户的密码与授权:

    mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '111111'; 
    mysql> grant all privileges on *.* to 'root' @'%' identified by 111111; 
    mysql> flush privileges;
    

1.4 安装过程出现的问题:

  • 其他设备在客户端中打开表的速度非常慢(无论表的大小),甚至连接超时,但是直接登录到服务器在本地连接MySQL,速度则正常。

    问题原因:MySQL数据库收到一个网络连接后,首先拿到对方的IP地址,然后对这个IP地址进行反向DNS解析从而得到这个IP地址对应的主机名。用主机名在权限系统里面进行权限判断。反向DNS解析是耗费时间的,有可能让用户感觉起来很慢。甚至有的时候,反向解析出来的主机名并没有指向这个IP地址,这时候就无法连接成功了。

    解决方案:为了避免这个反查过程,可以在MySQL的配置文件my.cnf的[mysqld]项下追加以下配置:

    skip-name-resolve
    

2 yum安装mysql

需要Linux能联外网,或者配置本地yum源。

  • 安装mysql
[root@node01 /]# yum install -y mysql-server
  • 启动
[root@node01 /]# service mysqld start
  • 登陆,修改权限
    这种方式安装的mysql初始密码为空,因此初次登陆时只需输入mysql即可,然后再修改相应权限。
[root@node01 /]# mysql

mysql>
mysql> use mysql;
mysql> select user,password,host from user;
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '111111' WITH GRANT OPTION;
mysql> select user,password,host from user;
mysql> delete from user where password ='';

mysql> flush privileges;

3 MySQL主从复制

IP角色
192.168.33.3master
192.168.33.4slave

3.1 master配置(192.168.33.3)

  1. master上开启binlog日志
    一般mysql配置文件在目录/etc下,叫my.cnf (如果找不到的话也有可能在这些目录下:/etc/my.cnf,/etc/mysql/my.cnf,/usr/local/mysql/etc/my.cnf)

    1、vim /etc/my.cnf
    
    2、在[mysqld]下加入:
    port=3306
    server-id=1 #服务器id (主从必须不一样)
    log-bin=mysql-bin #打开日志(主机需要打开),这个mysql-bin也可以自定义,这里也可以加上路径#作为主机的配置
    binlog-do-db=employees #要给从机同步的库#
    binlog-do-db=binlog-ignore-db=mysql #不给从机同步的库(多个写多行)
    binlog-ignore-db=information_schema
    binlog-ignore-db=performance_schemab
    inlog-ignore-db=sys
    expire_logs_days=7 #自动清理 7 天前的log文件,可根据需要修改
    3、重启数据库
    service mysqld restart
    

    登陆后测试log_bin是否成功开启:
    mysql> show variables like '%log_bin%';
    如果列表里的 log_bin 值为 on 说明已开启mysql二进制日志。

  2. 创建用户,每一个从服务器都需要用到一个账户名和密码来连接主服务器,可以为每一个从服务器都创建一个账户,也可以让全部服务器使用同一个账户。下面就为同一个ip网段的所有从服务器创建一个只能进行主从同步的账户。
    首先登陆mysql,然后创建一个用户名为rep,密码为123456的账户,该账户可以被192.168.253网段下的所有ip地址使用,且该账户只能进行主从同步。

    mysql> create user 'rep'@'192.168.33.%' identified by '111111';
    mysql> grant replication slave on *.* to 'rep'@'192.168.33.%' ;
    

    授权时如果报错“Access denied”,可root用户有没有授权权限。
    mysql> select host,user,grant_priv,Super_priv from mysql.user;
    ±----------±---------±-----------±-----------+
    | host | user | grant_priv | Super_priv |
    ±----------±---------±-----------±-----------+
    | 127.0.0.1 | root | Y | Y |
    | localhost | root | N | Y |
    | 10.0.3.% | repluser | N | N |
    ±----------±---------±-----------±-----------+
    可以看到localhost的grant_priv的值为N,也就是说root用户不能授权给其他用户,所以我们需要把这个值改为Y。
    mysql> update mysql.user set grant_priv=‘Y’ where host=‘localhost’;
    mysql> flush privileges;
    改完之后最好重启一下服务器(我没重启还是会报那个错)。

  3. 查看主服务器上当前的二进制日志名

    mysql> show master status\G #
        File: mysql-bin.000003
    Position: 154
    

    这里的file 和position 要和slave上的一致,在下面配置slave时需要用到。

3.2 slave配置(192.168.33.4)

  1. vim /etc/my.cnf

    [mysqld]
    port=3306
    server_id=4  #不能与其他mysql服务器重复
    
    #加上以下参数可以避免更新不及时,SLAVE 重启后导致的主从复制出错。
    read_only = 1
    master_info_repository=TABLE
    relay_log_info_repository=TABLE
    #relay_log_recovery=1 #从机禁止写
    #super_read_only=1 #从机禁止写
    
  2. 重启mysql服务,登录slave数据库,并做如下设置:

    mysql> stop slave;
    mysql> change master to
    -> master_host='192.168.33.3',   #master的ip
    -> master_user='rep',   #备份用户名
    -> master_password='111111',   #密码
    -> master_log_file='mysql-bin.000003',   #要与master的参数一致
    -> master_log_pos=154;   #要与master的参数一致
    mysql> start slave;
    
  3. 查看slave从机的状态:

    mysql> show slave status \G
    

    Slave_IO_Running: Yes
    Slave_SQL_Running: Yes
    如上2个yes 代表设置成功。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值