mysql5.7多实例(第一篇)

mysql主从配置的基本思路:(个人观点)

1)各个节点都开起bin_log日志

2)master会将变动记录到二进制日志里面;

3)master有一个I/O线程将二进制日志发送到slave;

4) slave有一个I/O线程把master发送的二进制写入到relay日志里面;

5)slave有一个SQL线程,按照relay日志处理slave的数据;

我的具体实现步骤:

1)关闭selinux,简单的描述下我了解到的selinux,selinux是一套安全的机制,功能方面可以一些机制所替代。比如防火墙等系列安全措施

关闭的方法: 将/etc/selinux/config里的SELINUX设置成:disabled(永久关闭)     setenforce 0 (临时关闭)

2)下载mysql:(我用的是5.7版本)wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.19-linux-glibc2.12-x86_64.tar.gz

a.解压mysq:tar -zxvf mysql-5.7.19-linux-glibc2.12-x86_64.tar.gz

b.移动mysql:sudo mv mysql-5.7.19-linux-glibc2.12-x86_64 /usr/local/mysql

c.使用root用户  创建mysql实例用户及文件

            1、 useradd mysql -r -s /sbin/nologin         

    2、 mkdir -p /usr/local/mysql/mysql_files  //数据导入导出目录

    3、 创建多实例数据存储目录:sudo mkdir -p /data/mysql_data{1..3}

    4、 修改mysql目录的属组及用户:sudo chown root.mysql -R /usr/local/mysql

    5、 修改专用目录的属主及属组:sudo chown mysql.mysql -R /usr/local/mysql/mysql_files  /data/mysql_data{1..3}

d.mysql的配置文件/etc/my.cnf

vim /etc/my.cnf

添加二进制日志配置,开启二进制(master-bin只是日志文件名称,可以自己指定)

log-bin=master-bin

server-id=1

注意:server-id是要唯一,不然会报错,每个节点指定一个唯一标识符

我的my.cnf:

####################主从这一块的配置 点在这呢  

#yzy --- new --- config

[mysqld_multi]

mysqld = /usr/local/mysql/bin/mysqld

mysqladmin = /usr/local/mysql/bin/mysqladmin

log = /tmp/mysql_multi.log

[mysqld1]

datadir = /data/mysql_data1      #设置数据目录

socket = /tmp/mysql.sock1        #设置sock文件存放路径

port = 3306                      #设置监听开放端口

user = root                      #设置运行用户

performance_schema = off          #关闭监控

innodb_buffer_pool_size = 32M        #设置innodb 缓存大小

bind_address = 0.0.0.0              #设置监听IP地址

skip-name-resolve = 0                #关闭DNS反向解析

log-bin=mysql-bin

server-id=11

[mysqld2]

datadir = /data/mysql_data2

socket = /tmp/mysql.sock2

port = 3307

user = root

performance_schema = off

innodb_buffer_pool_size = 32M

bind_address = 0.0.0.0

skip-name-resolve = 0

log-bin=mysql-bin

server-id=12

[mysqld3]

datadir = /data/mysql_data3

socket = /tmp/mysql.sock3

port = 3308

user = root

performance_schema = off

innodb_buffer_pool_size = 32M

bind_address = 0.0.0.0

skip-name-resolve = 0

log-bin=mysql-bin

server-id=13

e:初始化各个mysql实例:初始化完后会在日志中生成密码,记得保存(会用的到这些初始密码)

   1、sudo /usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql_data1

 2、sudo /usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql_data2

  3、sudo /usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql_data3

d:SSL实例连接各个节点

    a、sudo /usr/local/mysql/bin/mysql_ssl_rsa_setup --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql_data1

    b、sudo /usr/local/mysql/bin/mysql_ssl_rsa_setup --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql_data2

    c、sudo /usr/local/mysql/bin/mysql_ssl_rsa_setup --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql_data3

3)复制多实例脚本到服务管理目录下

  sudo cp /usr/local/mysql/support-files/mysqld_multi.server /etc/init.d/mysqld_multi

给予脚本可执行权限:sudo chmod +x /etc/init.d/mysqld_multi

加入service服务管理: sudo chkconfig --add mysqld_multi

添加环境变量

在文件最后面添加内容:sudo vim /etc/profile

export MYSQL_HOME=/usr/local/mysql

export PATH=${MYSQL_HOME}/bin:$PATH

使修改的配置文件生效:source /etc/profile

这一块:我执行时提示找不到source命令,第一点使用root用户,其次嘞,你要把你添加的配置内容整立正的,弄对齐了,格式要严谨!!! python 亦如此

可以不帅,但是要立正! ^_^!

4)查看mysql实例状态:mysqld_multi report; 如果显示三个实例都not running 启动各个实例: sudo mysqld_multi start

启动成功后,再擼一遍查看状态:mysqld_multi report; 这一次全部显示 running 

看下端口占用(严谨给你我他都会带来安全感!)

sudo ss -tulpn|grep mysqld

5)连接各个实例 修改密码:

   a.sudo mysql -S /tmp/mysql.sock1 -p‘上面说到的初始密码’

 b.进去后修改root密码: set password=password('123456');

    c.更改root用户的host属性 update mysql.user set host = '%' where user ='root;

 d. 使修改生效:flush privileges;

授权

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;

FLUSH PRIVILEGES;

其中,root 是用户名,% 表示所有人都可以访问,123456是我的登陆实例的密码,到这大致就完成了。再细化下小细节.

6)小细节:

如果你想停掉某个实例:

mysqladmin -uroot -p'123456' -S /tmp/mysql.sock3 shutdown

-u 用户 -p密码  然后跟着节点的sock信息  执行一下,喀嚓一下就停掉了。

mysqld_multi report; 再查看以下  节点3 not running 了

还有配置 主从,我这里是3306是主  3307,3308 从 我说的是端口哈。

我是杂配置的呢  look:

change master to

master_host='127.0.0.1',

master_port=3306,

master_user='root',

master_password='123456',

master_log_file='mysql-bin.000005',

master_log_pos=154;

master_log_file 配置这块的参数  可以在从节点查看 主节点信息,口令:show master status\G;

执行  start slave;    show slave status\G;  查看信息,注意的是俩个变量属性, Slave_IO_Running  和 Slave_SQL_Running  正确的话都是YES

最后呢,开起各个从节点, start slave;  然后登陆主节点: 我的3306是主节点,

mysql -S /tmp/mysql.sock1 -p'123456'

show databases;

在主节点新建个空库,导入数据看俩个从节点是否也有新建的库,

create database pairsdb ;

use pairsdb;

set names utf8;

source/opt/tools/paris.sql;

等待结束后,进入各个从节点查看是否包含新导入的库,或者你也可以在主节点新建个库

create database abcDB;

create table t1 (id int,name varchar(200),createtime timestamp,key(id));

insert into t1 values (1,'aa',now());

insert into t1 values (3,'bb',now());

执行完上述操作后,切换到Salve从节点看看是否同步过去,不出意外的话,应该是会马上同步过去的。

遇到的小阻碍:

我更新abcdb 表中的字段时  主变,其中一个从节点没变;我查看了下 没变的那个节点的: show slave status\G;

发现 Slave_SQL_Running  为false 就是为NO,怪不得呢,没病不死人,光然有鬼。

解决办法:

stop slave;                                                     

SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1; START SLAVE;           

start slave;                                                     

show slave status\G;            

邮箱:[email protected]

你可能感兴趣的:(mysql5.7多实例(第一篇))