您的位置:首页 > 运维架构 > Linux

centos中mysql的安装(yum方式),及主从复制配置(一主两从)

2018-02-09 16:38 776 查看
一,mysql的基本安装(yum方式)原文链接http://www.centoscn.com/mysql/2016/0626/7537.html① # 下载mysql源安装包shell> wget http://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm# 安装mysql源shell> yum localinstall mysql57-community-release-el7-8.noarch.rpm检查mysql源是否安装成功shell> yum repolist enabled | grep "mysql.*-community.*"②安装MySQLshell> yum install mysql-community-server③启动MySQL服务shell> systemctl start mysqldshell> systemctl enable mysqldshell> systemctl daemon-reload
④修改root默认密码先查看临时密码shell> grep 'temporary password' /var/log/mysqld.log登录shell> mysql -uroot -pmysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'Zhiyuan2018!'; 授权mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'Zhiyuan2018!' WITH GRANT OPTION;刷新权限mysql> FLUSH   PRIVILEGES;⑤修改默认编码为utf-8修改/etc/my.cnf配置文件,在[mysqld]下添加编码配置,如下所示:[mysqld]character_set_server=utf8init_connect='SET NAMES utf8'⑥重启服务shell> systemctl restart mysqld
二,主从配置(一主两从)
①准备阶段在局域网中准备三个节点的集群,主机名分别为master,slave1,slave2,ip分别为192.168.30.101,192.168.30.102,192.168.30.103主机之间可以互相ping通,每个主机上面都已经按照如上配置好,并且都已经运行了mysql服务,且假设所有的mysql数据库的root用户的密码都为Zhiyuan2018!
②配置mysql的/etc/my.cnf文件shell> vi /etc/my.cnf


添加三行配置log-bin=mysql-binbinlog_format=mixedserver-id=101其中server-id起到标识作用,一般用ip地址最后一个10进制值如192.168.30.101就取101,其他两台机器中的/etc/my.cnf文件也这样添加三行,修改最后的server-id分别为102,103
配置
4000
好之后把所有的mysql服务都重启使用命令 systemctl restart mysqld
③设置主mysql数据库(master)我们选择第一台master为主数据库,ip为192.168.30.101,此时每个mysql服务都只有一个root用户,所以我们暂时使用root用户来搭建主从复制
登录mysql -u root -p 输入密码


此时将复制的权限给到root用户mysql > GRANT replication slave ON *.* TO 'root'@'%' IDENTIFIED BY 'root用户的密码'; 刷新权限mysql> FLUSH   PRIVILEGES;接下来执行mysql> show master status;查看主服务器BIN日志的信息(执行完之后记录下这两值,然后在配置完从服务器之前不要对主服务器进行任何操作,因为每次操作数据库时这两值会发生改变).


记录下来file,和position两项的值原理:mysql主从复制是通过日志文件来实现的,主数据库每次执行完操作都往日志中写入操作事件,而主数据库从日志文件中读取操作操作事件,之后再在本地数据库执行,所以我们需要知道日志文件的名字,和日志最新的定位,position用于对操作的定位,可以设置从数据库执行操作的开始点。
④设置从数据库(slave1,slave2)shell> mysql -uroot -p输入密码
此时如果slave已经启动,则先关闭mysql> stop slave;
此时输入mysql> change master tomysql> master_host = "192.168.30.101",mysql> master_user = "root",mysql> master_password = "Zhiyuan2018!",mysql> master_log_file = "mysql-bin.000005",mysql> master_log_pos = 56531;此时,master_host是主数据库ip地址,master_user是主数据库有复制权限的用户,此处为root用户,密码为root用户的密码,master_log_file为从主数据库中查询出来的(第四步操作中show master status;指令的结果中,file的值),master_log_pos也是从主数据库中查询出来的(第四步操作中show master status;指令的结果中,position的值,但是也可以自己设置,这样从数据库可能会有错误)
启动slave功能mysql> start slave;
查看slave的状态msyql> show slave status\G;


如果此时发现,slave_io_running 和 slave_sql_running两项的值都为yes值时,说明主从复制配置成功
用以上相同的方法,配置第二个msyql从数据库的slave功能
⑤测试主从复制功能在mysql主数据库上执行mysql> create database test;mysql> use test;mysql> create table helloworld (mysql> id int ,mysql> name varchar(20)mysql> );mysql> insert into helloworld values(1,'yifan'),(2,'changfu'),(3,'jinzhou');


此时到slave1上面执行mysql> show databases;mysql> use test;mysql> show tables;mysql> select * from helloworld;


发现主从复制成功
此时在mysql主库(192.168.30.101)执行:mysql> show master status;


之后再在从数据库(slave2,192.168.30.102)上面执行:mysql> show slave status\G;


对比两张图中的红色方框内容,发现刚刚的sql语句的日志文件业已更新,并复制到丛库中之后再检查另一个丛库(slave2,192.168.30.103)
⑥复制出错当在丛库执行show slave status\G;时,发现:Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: 'Could not find first log file name in binary log index file'此时可能是由于主数据库的波动问题
解决方法:在主数据库(master)中执行mysql> flush logs;mysql> flush master status;记录下此时的file和position的值


在从数据库中(slave1,slave2)中执行mysql> stop slave;mysql> CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000007',MASTER_LOG_POS=154;请注意一一对应关系,填充的值都是从主数据库中查出的最新值
启动slave功能mysql> start slave;


发现slave功能已经正常,此时再用相同的方法设置其他从数据库
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息