- docker安装MySQL源码编译
- 创建多实例环境
- 主从搭建过程
- 复制工作原理
- 创建多实例目录;
[root@43812cb2f48a /]# mkdir -p /data/330{7..9}/data
- 目录授权;
[root@43812cb2f48a /]# chown -R mysql.mysql /data
- 创建mysql配置文件
[root@43812cb2f48a /]# vim /data/3307/my.cnf server_id=7 port=3307 basedir=/application/mysql datadir=/data/3307/data log_bin=/data/3307/mysql-bin log_error=/data/3307/mysql.log socket=/data/3307/mysql.sock skip_name_resolve [root@43812cb2f48a /]# vim /data/3308/my.cnf server_id=8 port=3308 basedir=/application/mysql datadir=/data/3308/data log_bin=/data/3308/mysql-bin log_error=/data/3308/mysql.log socket=/data/3308/mysql.sock skip_name_resolve [root@43812cb2f48a /]# vim /data/3309/my.cnf server_id=9 port=3309 basedir=/application/mysql datadir=/data/3309/data log_bin=/data/3309/mysql-bin log_error=/data/3309/mysql.log socket=/data/3309/mysql.sock skip_name_resolve
- 初始化数据;
[root@43812cb2f48a /]# /application/mysql/scripts/mysql_install_db --user=mysql --basedir=/application/mysql --datadir=/data/3307/data [root@43812cb2f48a /]# /application/mysql/scripts/mysql_install_db --user=mysql --basedir=/application/mysql --datadir=/data/3308/data [root@43812cb2f48a /]# /application/mysql/scripts/mysql_install_db --user=mysql --basedir=/application/mysql --datadir=/data/3309/data
- 启动数据库;
[root@43812cb2f48a /]# mysqld_safe --defaults-file=/data/3307/my.cnf & [root@43812cb2f48a /]# mysqld_safe --defaults-file=/data/3308/my.cnf & [root@43812cb2f48a /]# mysqld_safe --defaults-file=/data/3309/my.cnf &
错误: 可能遇到mysql写日志没权限或者日志文件不存在
解决办法执行:
[root@43812cb2f48a /]# touch /data/330{7..9}/mysql.log
[root@43812cb2f48a /]# chown -R mysql.mysql /data/*
- 查看是否启动多实例成功,查看端口号;
[root@43812cb2f48a /]# netstat -lnp|grep 330 tcp6 0 0 :::3307 :::* LISTEN 273/mysqld tcp6 0 0 :::3308 :::* LISTEN 461/mysqld tcp6 0 0 :::3309 :::* LISTEN 652/mysqld unix 2 [ ACC ] STREAM LISTENING 29814 652/mysqld /data/3309/mysql.sock unix 2 [ ACC ] STREAM LISTENING 25574 273/mysqld /data/3307/mysql.sock unix 2 [ ACC ] STREAM LISTENING 30745 461/mysqld /data/3308/mysql.sock主从搭建过程
查看本机ip
ifconfig
- 主(master):127.17.0.2:3307
从(slave):127.17.0.2:3308 - 主库中进行创建复制用户(权限是replication slave)
[root@43812cb2f48a /]# mysql -S /data/3307/mysql.sock #mysql授权语句 mysql>grant replication slave on *.* to repl@'127.17.0.%' identified by '123';
- 全备主库, 恢复到从库
- 主库备份
[root@43812cb2f48a /] mysqldump -S /data/3307/mysql.sock -A --master-data=2 -R --triggers --single-transaction >/tmp/full.sql
- 从库恢复
[root@43812cb2f48a /]# mysql -S /data/3308/mysql.sock mysql>set sql_log_bin=0; mysql>source /tmp/full.sql
- 从库开启复制
- 告诉从库从哪个位置号开始自动复制
[root@43812cb2f48a /]# head -30 /tmp/full.sql
[root@43812cb2f48a /]# mysql -S /data/3308/mysql.sock mysql> help CHANGE MASTER TO #查看执行sql命令 mysql> CHANGE MASTER TO MASTER_HOST='127.17.0.2', MASTER_USER='repl', #复制用户 MASTER_PASSWORD='123', MASTER_PORT=3307, MASTER_LOG_FILE='msyql-bin.000002',#主库bin日志 MASTER_LOG_POS='325', MASTER_CONNECT_RETRY=10; #连接重试次数 mysql> start slave #启动主从 mysql> show slave status G #主从复制监控(查看主从是否启动成功)
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
两个为yes代表主从搭建成功啦!!!
- 主库状态查看
[root@43812cb2f48a /]# mysql -S /data/3307/mysql.sock mysql> show processlist; mysql> show master status;
- 线程管理
启动和关闭两个线程
[root@43812cb2f48a /]# mysql -S /data/3308/mysql.sock mysql> reset slave all; #如果连接信息填错可以重置master.info 在执行change master to mysql> stop slave; mysql> start slave;
单独启动关闭一个线程
[root@43812cb2f48a /]# mysql -S /data/3308/mysql.sock mysql> stop slave io_thread; mysql> stop slace sql_thread; mysql> start slave io_thread; mysql> start slace sql_thread;复制工作原理
文件
M:
binlog:记录主库数据变化
S:
relay-log: 中继日志,储存从主库请求的二进制日志的储存位置
master.info:储存用户,密码,ip,port,记录上次请求过的binlog位置
relay-log.info:记录了上次sql线程执行过的relaylog的位置点
线程:
M:
dump(IO)thread(投递线程)
主库发从二进制日志给从库的线程
S:
IO thread:
请求binlog,接收binlog的线程



