新萄京计算机网络

 新萄京计算机网络     |      2019-12-10

mysql数据库服务器的调整

前天给客户做一次数据库服务器的调整,把以前的一台主机废弃,一台从库提升为主,然后新加入其他从机,这里记录下操作步骤:

一、老主库开启只读,以便后面步骤出问题回滚回来:flush tables with read lock

二、110.10.1.102升级为主库,暂停同步,重置为主,清理中继信息,重启数据库

stop slave , reset master , mv master.info relay.log /tmp

修改配置文件my.cnf 加入expire_logs_days=15和innodb_file_per_table

三、开启新主库只读:flush tables with read lock

导出逻辑备份:mysqldump -u root -p --single-transaction -R --flush-logs --master-data=1 -databases db1 db2 db3> database1204.sql

四、show master status,往新的从库导入数据,并change master

五、最后查看所有从库的状态信息,show slave status,并unlock 主库的tables

提醒一点,mysql5.5的版本不再支持/etc/my.cnf 里的masterhost等参数,必须要连上mysql执行change master

前天给客户做一次数据库服务器的调整,把以前的一台主机废弃,一台从库提升为主,然后新加入其他从机,这里...

mysql主从复制逻辑:

1.从库执行start slave 开启主从复制。

2.从库请求连接到主库,并且指定binlog文件以及位置后发出请求。

3.主库收到从库请求后,将信息返回给从库,除了信息日志外,还包含新的文件名称以及下一个更新节点。

4.从库接收到主库发送的信息后,会将信息更新至自身的relay log中,并且将新的文件名记录到master-info中。

5.从库SQL线程会检测本地relay-log,如有变化,会将信息解析为SQL可执行语句并且执行该语句,同时在relay-log.info中记录当前文件名以及位置点。

 

mysql 主从复制操作方法:
主库:
1.保证bin-log的开启(可在mysql中利用 show variables where variable_name like 'bin%' 中查看,其中栏位值为ON则为开启,OFF则为关闭 bin-log具体逻辑取决于my.cnf设定值中的bin-log)
2.新建用户并且设定其为replication slave账户(grant replication slave on db_name.tb_name to 'user_name'@'host_name' identified by 'password';)
3.对主库锁表只读(flush table with read lock;)
4.收集master的信息,包括(replication slave username and password , master status filename and master status position(get master status: show master status ) )
5.导出主库数据,解锁(unlock tables;)

从库:
1.将主库数据导入从库
2.将从库连接主库(change master to master_host='host_name',master_port='master_port',master_user='master_user',paster_password='master_password',master_log_file='master_status_log_file',master_log_pos='master_status_log_position');
3.开启主从复制,start slave; 查看从库状态是否OK(show slave statusG;)如果确定状态为NO时,则需要重新启动master和slave,再次检查状态是否OK

 

0.创建新的docker网络,用于主从服务器指定ip

1 liwangdeMacBook-Air:~ liwang$ docker network create --subnet=172.18.0.0/16 mynetwork

 

1.安装主服务器

1.1 利用docker run一个新的centos容器,并且指定其ip地址,将数据库文件挂载至宿主机上

1 liwangdeMacBook-Air:~ liwang$ docker run -i -t --name mysql_master --net mynetwork --ip 172.18.0.2 -p 3306:3306 -v /Users/liwang/docker/mysql_data:/data centos /bin/bash

 

1.2 下载mysql二进制包进行安装配置

mysql下载路径:

 

下载完毕后,利用docker cp将包copy至容器内

1 liwangdeMacBook-Air:Downloads liwang$ docker cp mysql-5.7.22-linux-glibc2.12-x86_64.tar.gz `docker inspect -f {{.ID}} mysql_master`:/soft

安装步骤:

1 1 创建用户:
2 [root@76ffc9a23bf6 /]# useradd mysql -s /sbin/nologin -M
3 2 解压:
4 [root@76ffc9a23bf6 soft]# tar xf mysql-5.7.22-linux-glibc2.12-x86_64.tar.gz
5 3 初始化:
6 [root@76ffc9a23bf6 mysql-5.7.22-linux-glibc2.12-x86_64]# bin/mysqld --initialize --basedir=/soft/mysql-5.7.22-linux-glibc2.12-x86_64 --datadir=/data --user=mysql
7 4 启动mysql:
8 [root@76ffc9a23bf6 mysql-5.7.22-linux-glibc2.12-x86_64]# /soft/mysql-5.7.22-linux-glibc2.12-x86_64/bin/mysqld_safe --user=mysql &

 

当第一个容器能够顺利打开mysql时,利用docker commit将容器制作成镜像,以便slave直接run出来即可

1 liwangdeMacBook-Air:Downloads liwang$ docker commit `docker ps -a | grep mysql_master | awk '{print $1}'` generil_mysql

 

利用generil_mysql,将run slave 

1 liwangdeMacBook-Air:Downloads liwang$ docker run -i -t --name mysql_slave --net mynetwork --ip 172.18.0.3 -p 3306:3306 -v /Users/liwang/docker/mysql_data_3307:/data generil_mysql /bin/bash

 

3.配置主从复制

1.主库配置