mysql 基于dorker 主从同步

#拉取mysql5.7镜像

docker pull mysql5.7     #如果已经有mysql5.7镜像就不用这步了

#/home/test目录下创建mysql文件夹,下面创建dataconf.d文件夹(创建路径可以自己定)

#创建主库的文件夹

mkdir /private/var/mysql     #注意:/home/test/mysql  home/test/mysql  这两个路径是不一样的,生成的文件也是在不同的路径下(******

mkdir /private/var/mysql/conf.d

mkdir /private/var/mysql/data

 

#创建从库的文件夹(取名mysql1

mkdir /private/var/mysql1

mkdir /private/var/mysql1/conf.d

mkdir /private/var/mysql1/data

 

#创建my.cnf配置文件

touch  /private/var/mysql/my.cnf

 

#主库的my.cnf添加如下内容

[mysqld]

user=mysql

character-set-server=utf8

default_authentication_plugin=mysql_native_password

secure_file_priv=/var/lib/mysql

expire_logs_days=7

sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

max_connections=1000

# 如果是gtid模式 配置文件要加上

master_info_repository=TABLE

relay_log_info_repository=TABLE

gtid_mode=on

enforce_gtid_consistency=on

binlog_format=row

 

server-id=100

#开启binlog日志

log-bin=mysql-bin

 

[client]

default-character-set=utf8

[mysql]

default-character-set=utf8

 

 

 

从库my.cnf文件 (复制主库的my.cnf到从库)

 

但是从库的my.cnf文件不是这样写的,需要修改一下:1.主从库的id号需要设置不一样 2.需要设置Relay_log文件

[mysqld]

user=mysql

character-set-server=utf8

default_authentication_plugin=mysql_native_password

secure_file_priv=/var/lib/mysql

expire_logs_days=7

sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

max_connections=1000

 

#设置id  (主从id号需要设置不一样)

server-id=101

#开启binlog日志,以备slave作为其他slaveMaster时使用

log-bin=mysql-slave-bin

#relay_log配置中记日志

relay_log=edu-mysql-relay-bin

 

[client]

default-character-set=utf8

 

[mysql]

default-character-set=utf8

 

 

docker run -di -v /private/var/mysql/data/:/var/lib/mysql -v /private/var/mysql/conf.d:/etc/mysql/conf.d -v /private/var/mysql/my.cnf:/etc/mysql/my.cnf -p 33307:3306 --name mysql-master -e MYSQL_ROOT_PASSWORD=123456 mysql:5.6

 

 

docker run -di -v /private/var/mysql2/data/:/var/lib/mysql -v /private/var/mysql2/conf.d:/etc/mysql/conf.d -v /private/var/mysql2/my.cnf:/etc/mysql/my.cnf -p 33306:3306 --name mysql-slave -e MYSQL_ROOT_PASSWORD=123456 mysql:5.6

 

在 master 终端执行

docker exec -it mysql-master bash  进入容器

slave 终端执行

docker exec -it mysql-slave bash

 

//192.168.12.108 

mysql -h 192.168.3.6 -P 33307 -u root -p123456

#在主库创建用户并授权

##创建test用户

create user 'test'@'%' identified by '123';

##授权用户

grant all privileges on *.* to 'test'@'%' ;

###刷新权限

flush privileges;

#查看主服务器状态(显示如下图)

show master status;

 

+------------------+----------+--------------+------------------+-------------------+

| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |

+------------------+----------+--------------+------------------+-------------------+

| mysql-bin.000004 |      479 |              |                  |                   |

+------------------+----------+--------------+------------------+-------------------+

1 row in set (0.01 sec)

 

#连接从库

mysql -h 192.168.90.59 -P 33306 -u root -p123456

#配置详解

/*

change master to

master_host='MySQL主服务器IP地址',

master_user='之前在MySQL主服务器上面创建的用户名' 

master_password='之前创建的密码',

master_log_file='MySQL主服务器状态中的二进制文件名',

master_log_pos='MySQL主服务器状态中的position';

*/

#命令如下

change master to master_host='192.168.3.30',master_port=33307,

master_user='test',

master_password='123',

#基于二进制日志复制

master_log_file='mysql-bin.000009',master_log_pos=0;

#基于gtid复制

master_auto_position=1;

 

#启用从库

start slave;

#查看从库状态(如下图)

show slave status\G;

 

 

#在主库上创建数据库test1

create database test1;

use test1;

#创建表

create table tom (id int not null,name varchar(100)not null ,age tinyint);

#插入数据

insert tom (id,name,age) values(1,'xxx',20),(2,'yyy',7),(3,'zzz',23);

#在从库上查看是否同步成功

#查看数据库

show database;

use test1;

#查看表

show tables;

#查看数据

select * from tom;

 

 

双主热备  互为主从

my.cnf配置文件

relay_log=mysql-relay-bin  

log_slave_updates=1

原来的从服务器 ##授权用户

grant all privileges on *.* to 'test'@'%' ;

原来的主服务器

change master to master_host='192.168.90.59',master_port=33306,

master_user='test',

master_password='123',master_log_file='mysql-bin.000009',master_log_pos=123;

//使用docker 建一个主服务器的slave

docker run  -di -v /private/var/mysql4/data/:/var/lib/mysql -v /private/var/mysql4/conf.d:/etc/mysql/conf.d -v /private/var/mysql4/my.cnf:/etc/mysql/my.cnf -p 33309:3306 --name mysql-master-slave -e MYSQL_ROOT_PASSWORD=123456 mysql:5.6

进入容器后 change就可以

 

mysql 表分区

例如:先建立地区表  然后根据aid 地区分区

CREATE TABLE `area` (

  `aid` int(11) NOT NULL,

  `name` char(6) DEFAULT NULL

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

根据地区表建立user表

create table user(

     uid int, uname char(6), aid int  )engine innodb charset utf8

   partition by list(aid)(

        partition bj values in (1),//aid相同  bj为自定义名

        partition tj values in (2),

       partition hb values in (3)

     );

建立后  show global variables like "%datadir%";  命令来查找数据库文件位置

生成

-rw-rw---- 1 mysql mysql     8588 Mar 23 08:22 area.frm

-rw-rw---- 1 mysql mysql    98304 Mar 23 08:27 area.ibd

 

-rw-rw---- 1 mysql mysql    98304 Mar 23 08:39 user#P#bj.ibd

-rw-rw---- 1 mysql mysql    98304 Mar 23 08:28 user#P#hb.ibd

-rw-rw---- 1 mysql mysql    98304 Mar 23 08:28 user#P#tj.ibd

-rw-rw---- 1 mysql mysql     8618 Mar 23 08:28 user.frm

-rw-rw---- 1 mysql mysql       32 Mar 23 08:28 user.par

查看Mysql表结构的命令,如下:

desc 表名;
show columns from 表名;
describe 表名;
show create table 表名;

use information_schema
select * from columns where table_name='表名';

顺便记下:
show databases;
use 数据库名;
show tables;

redis  启动

redis-server /usr/local/etc/redis.conf

//进入redis

redis-cli

//退出

shutdown

exit

 

 

//rabbitMQ 安装

mkdir /private/var/rabbitmq -p

docker run -d --hostname rabbit-svr --name rabbit -p 5672:5672 -p 15672:15672 -p 25672:25672 -v /private/var/rabbitmq:/private/var/lib/rabbitmq rabbitmq:management

nginx 分析

//查看nginx网站 日志文件    控制器名字 正序    倒序

cat tp6.access.log | grep "/api/smscode" | awk '{print $4}' | uniq -c | sort -r

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值