192.168.0.224 master mysql5.7.19 k8s1
192.168.0.228 slave mysql5.7.19 k8s2
mysql5.7--主从搭建开始
在master上面创建专门用于备份的 用户:
grant replication slave on *.* to 'repl'@'192.168.0.228' identified by 'Repl@123'; flush privileges; commit;
GRANT REPLICATION SLAVE ON *.* to 'mysync'@'%' identified by 'q123456';
表示所有客户端都可能连,只要帐号,密码正确,此处可用具体客户端IP代替,如192.168.145.226,加强安全。
修改主服务器master配置文件:
编辑my.cnf配置文件,设置跳过密码验证
root# echo 'skip-grant-tables=1' >> /etc/my.cnf
root# systemctl restart mysqld.service
# mysql
mysql> update mysql.user set authentication_string = password("Sun@123") where user='root';
mysql> SET PASSWORD = PASSWORD('Sun@123');
mysql> set password for root@localhost = password('Sun@123');
注释掉跳过密码登录的配置#skip-grant-tables=1
root# sed -i 's/skip-grant-tables=1/#skip-grant-tables=1/g' /etc/my.cnf
root# systemctl restart mysqld.service
重启MySQL,重新设置一次密码
root# mysql -uroot -pSun@123
mysql> set password for root@localhost = password('Sun@123');
mysql> SET PASSWORD = PASSWORD('Sun@123');
创建测试库和测试表
mysql -uroot -pSun@123
建表
CREATE TABLE IF NOT EXISTS `am21` (
`id` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
`name` varchar(50) DEFAULT NULL,
`name1` varchar(50) DEFAULT NULL,
`name2` varchar(50) DEFAULT NULL,
`name3` varchar(50) DEFAULT NULL,
`name4` varchar(50) DEFAULT NULL,
`name5` varchar(50) DEFAULT NULL,
`name6` varchar(50) DEFAULT NULL,
`sex` varchar(10) NOT NULL DEFAULT '0',
INDEX(id) ) ENGINE=innodb DEFAULT CHARSET=utf8 ;
delimietr //
创建存储过程
create procedure am27()
begin
declare i int;
set i=1;
while i<1000000 do
insert into am21 (name,name1,name2,name3,name4,name5,name6,sex) values ("zhou","sun1","孙福周2","联想3","谷歌4","百度5","上海6","w91");
set i=i+1;
end while;
end;//
delimiter ;
调用存储过程
call am27();
在master--k8s1--下修改配置文件
echo "log-bin=mysql-bin" >> /etc/my.cnf
echo "server-id=1" >> /etc/my.cnf
log-bin = mysql-bin
binlog_format = mixed
server-id=1
read_only=0
binlog-ignore-db=information_schema
binlog-ignore-db=mysql
binlog-ignore-db=performance_schema
binlog-ignore-db=sys
binlog-do-db=test
auto-increment-increment = 10
auto-increment-offset = 1
提示:master---可以注释掉的参数
重启数据库 service mysqld restart
锁定master主数据库,并备份需要同步的数据库
mysql> FLUSH TABLES WITH READ LOCK;
root@k8s1:/opt$ mysqldump --master-data -uroot -psunfuzhou test > test.sql
root@k8s1:/opt$pwd
/opt
复制master的备份文件到slave数据库上
root@k8s1:/opt$scp -p test.sql root@192.168.0.228:/opt
然后查看A服务器的binary日志位置,记住这个文件名和 位置, 等会在从服务器上会用到
登录主服务器的mysql,查询master的状态
注:执行完此步骤后不要再操作主服务器MYSQL,防止主服务器状态值变化
mysql> show master status\G;
*************************** 1. row ***************************
File: mysql-bin.000009
Position: 436002368
Binlog_Do_DB: test
Binlog_Ignore_DB: information_schema,mysql,performance_schema,sys
Executed_Gtid_Set:
1 row in set (0.00 sec)
主服务器已经做完了, 可以解除锁定了:
MYSQL> unlock tables
在slave--k8s2--下修改配置文件
vim /etc/my.cnf
echo "log-bin=mysql-bin" >> /etc/my.cnf
echo "server-id=2" >> /etc/my.cnf
log-bin=mysql-bin
binlog_format = mixed
server-id=2
read_only=1
replicate-ignore-db=information_schema
replicate-ignore-db=mysql
replicate-ignore-db=performance_schema
replicate-ignore-db=sys
relay_log=mysqld-relay-bin
log-slave-updates = ON
slave---可以注释掉的参数
把刚才从master服务器上导出的 hello.sql 导入到 slave的hello数据库中, 如果slave现在没有hello数据库,请先创建一个, 然后再导入
创建数据库:
mysql -uroot -psunfuzhou -e 'create database test' 建立test数据库
mysql -uroot -psunfuzhou -e 'show databases' 检查test数据是否建立成功
将刚才master 传到slave的test数据库的备份文件test.sql 导入到slave数据库中,如果你刚才导出了多个数据库, 需要把他们都一一上传导入。
mysql -uroot -psunfuzhou test < /opt/test.sql
开启同步, 在slave服务器上执行:
CHANGE MASTER TO
MASTER_HOST='192.168.0.224',
MASTER_USER='repl',
MASTER_PASSWORD='Repl@123',
MASTER_LOG_FILE='mysql-bin.000009',
MASTER_LOG_POS=436002368;

slave 开启复制线程
start slave
show master status \G;

mysql主主搭建开始
检查slave和master 的用户角色权限表
mysql -uroot -psunfuzhou -e "select user,host from mysql.user"

在slave上执行,创建用于master远程复制的用户 ,授予复制权限, 注意是master的IP---224
mysq>grant replication slave on *.* to 'repl'@'192.168.0.224' identified by 'Repl@123'; flush privileges; commit;
查看当前主从配置,并保存,开始进行主主配置

查看数据大小的脚本
Mysql ---查看数据库和表大小
查看mysql数据库大小的四种办法,分别有以下四种:
第一种:进去指定schema 数据库(存放了其他的数据库的信息)
use information_schema
第二种:查询所有数据库的数据文件和索引文件 大小
select concat(round(sum(DATA_LENGTH/1024/1024),2),'MB') as data_size from information_schema.TABLES;
select concat(round(sum(DATA_LENGTH/1024/1024),2),'MB') as data_size,
CONCAT(TRUNCATE(SUM(index_length)/1024/1024,2),'MB') AS index_size
from information_schema.TABLES;
第三种:查看指定数据库的数据文件和索引文件 的大小,比如说:数据库test
select concat(round(sum(DATA_LENGTH/1024/1024),2),'MB') as data_size,
CONCAT(TRUNCATE(SUM(index_length)/1024/1024,2),'MB') AS index_size
from information_schema.TABLES where table_schema='test';
第四种:查看指定数据库的 表 的数据文件和作引文件 大小,比如说:数据库test 中am21表
select concat(round(sum(DATA_LENGTH/1024/1024),2),'MB') as data_size,
CONCAT(TRUNCATE(SUM(index_length)/1024/1024,2),'MB') AS index_size
from information_schema.TABLES where table_schema='test' and table_name='am21';
综合查询在 5.7不适用 是因为sql_mode未设置
SELECT TABLE_SCHEMA, CONCAT(TRUNCATE(SUM(data_length)/1024/1024,2),' MB') AS data_size,
CONCAT(TRUNCATE(SUM(index_length)/1024/1024,2),'MB') AS index_size
FROM information_schema.tables;
GROUP BY TABLE_SCHEMA
ORDER BY data_length DESC;
报错如下
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'GROUP BY TABLE_SCHEMA
ORDER BY data_length DESC' at line 1
解决办法--- echo "sql_mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"" >> /etc/my.cnf 重启mysql,再次执行
查看sql_mode
mysql -uroot -psunfuzhou -e "SHOW VARIABLES LIKE 'SQL_MODE';"
设置sql_mode
临时设置sql_mode
mysql -uroot -psunfuzhou -e "SET sql_mode='NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION '"
全局设置sql_mode
mysql -uroot -psunfuzhou -e "SET global sql_mode='NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION '"
SET @@GLOBAL.sql_mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION";
SELECT TABLE_SCHEMA, CONCAT(TRUNCATE(SUM(data_length)/1024/1024,2),' MB') AS data_size,
CONCAT(TRUNCATE(SUM(index_length)/1024/1024,2),'MB') AS index_size
FROM information_schema.tables;
GROUP BY TABLE_SCHEMA
ORDER BY data_length DESC;
浙公网安备 33010602011771号