MySQL5.7源代码安装

MySQL5.7源代码安装(源码安装 【Server version: 5.7.17】 )

wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.17-linux-glibc2.5-x86_64.tar.gz

创建MySql安装程序的目录

mkdir -p /usr/local/mysql

创建MySql数据文件的目录

mkdir -p /usr/local/mysql/data

groupadd mysql

useradd -r -g mysql mysql

Mysql 单机主从复制:

  MySql服务可以采用主从机制进行备份,如果一对一进行备份对应生产环境而言比较浪费资源,主服务器吧数据变化记录到主日志,然后从服务通过I/O线程读取主服务器的日志,并将它写入到从服务的中继日志中,接着SQL线程读取中继日志,并且在从服务器上重放,从而实现MySQL复制,具体如图:后期补充架构图

MySQL具有可以运行多个实例的功能,这个功能是通过mysql_multi实现的。当一台机器上需要运行多个MySQL服务器的时候,mysql_multi是管理多个mysql的服务进程,这些服务进程用不同的unix socket或者是监听不同端口,通过命令,可以启动,关闭和报告所管理的服务器的状态.

下面在同一台服务器上使用mysql_multi管理多个MySQL服务进程.

tar -zxvf mysql-5.7.17-linux-glibc2.5-x86_64.tar.gz  -C /usr/local/mysql/

cd  /usr/local/mysql

mv * ..   移动并删除

chown -R mysql:mysql mysql/

 

/usr/local/mysql/support-files

cp my-default.cnf /etc/my.cnf   拷贝配置模板文件覆盖centos7默认安装的mariadb数据库的配置文件

# 指定默认的端口

port = 3306

# 指定Mysql绑定的IP

bind-address=0.0.0.0

# 指定数据目录

datadir=/usr/local/mysql/data

socket=/var/lib/mysql/mysql.sock

# 指定启动时使用的用户

user=mysql

# 指定时区与系统一致

default-time-zone=system

# 指定的存储引擎为InnoDB

default-storage-engine=InnoDB

# 指定错误日志的位置

log-error=/var/log/mysqld.log

# 设置进程目录

#pid-file=/var/run/mysqld/mysqld.pid   - 这是基于内存的目录,重新启动后会被清掉

pid-file=/var/lib/mysqld/mysqld.pid   --- 一切都不会有问题

# 默认配置MYSQL模式

sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

# 最大连接数

max_connections=5000

# 数据库编码utf8

character_set_server=utf8

init_connect='SET NAMES utf8'

explicit_defaults_for_timestamp=true

#不区分大小写 0: 大小写敏感; 1:大小写不敏感

lower_case_table_names = 1

 

将启动脚本放到/etc/init.d目录中

cp support-files/mysql.server   /etc/init.d/mysqld

将mysqld添加为系统服务

chkconfig --add mysqld

修改/etc/init.d/mysql参数

vi /etc/init.d/mysqld

basedir=/usr/local/mysql

datadir=/usr/local/mysql/data

添加服务mysql

chkconfig --add mysqld

 

设置mysql服务为自启动

chkconfig mysqld on

初始化 mysql 的数据库

cd /usr/local/mysql/bin/

./mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data     报下面的警告

有异常提示:TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details

解决办法:

配置文件增加

[mysqld]

explicit_defaults_for_timestamp=true

[ERROR] --initialize specified but the data directory has files in it. Aborting.

cd /usr/local/mysql/data

rm -rf *

cd /usr/local/mysql/bin/

再次执行初始化 mysql 的数据库(产生临时密码xhjt6dwfKa.< )

./mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data

firewall-cmd --permanent --add-port=3306/tcp

firewall-cmd --reload

设置mysql的远程访问

设置远程访问账号:grant all privileges on . to 远程访问用户名@’%’ identified by ‘用户密码’;

#添加环境变量,并使/etc/profile环境变量生效

echo "export PATH=$PATH:/usr/local/mysql/bin">>/etc/profile

sleep 3

source /etc/profile

/var/log/mysqld.log   查看日志,未启动

Starting MySQL.. ERROR! The server quit without updating PID file (/var/run/mysqld/mysqld.pid).

#mkdir -p /var/run/mysqld/

mkdir -p /var/lib/mysqld/

#chown -R mysql:mysql /var/run/mysqld/

chown -R mysql:mysql /var/lib/mysqld/

systemctl start|start|restart|stop|status  mysqld

ps -ef|grep mysql

/var/run/mysqld 目录每次重启后都需要手动去创建,是因为/var/run/目录下建立文件夹是在内存中,故每次重启后内存被清空导致/var/run/mysqld 也被清除,从而导致无法启动mysql


systemctl daemon-reload   //重构进程

MySQL 5.7 以后,不在允许使用空密码进行登录,默认会初始化一个密码到 MySQL Error 日志中,配置参数 log-error= 指定的文件。

登录MySQL的:

cd /usr/local/mysql/bin

./mysql -uroot -p                     之前的密码忘记了

如下解决方案:

vi /etc/my.cnf

skip-grant-tables   ---- 配置不需密码认证

=============================centosnode02=====================================

Centosnode02机器安装MYSQL服务器

跨主机之间的拷贝:

scp -r mysql-5.7.17-linux-glibc2.5-x86_64.tar.gz  root@centosnode02:/tools

在另外一台机器上拉取centosnode01机器上的相关文件

scp -r -P 22 root@centosnode01:/etc/profile  /etc

scp -r -P 22 root@centosnode01:/etc/my.cnf /etc

scp -r -P 22 root@centosnode01:/etc/init.d/mysqld /etc/init.d/

scp -r -P 22 root@centosnode02:/usr/local/mysql  /usr/local/

vi  /etc/my.cnf   

# 指定默认的端口

port = 3307

# 指定Mysql绑定的IP

bind-address=0.0.0.0                   # 避免虚拟机 nat模式出问题

mkdir -p /usr/local/mysql/data

mkdir -p /var/lib/mysqld/        ---放pid文件

mkdir -p /var/lib/mysql          ---放sock文件

groupadd mysql

useradd -r -g mysql mysql

chown -R mysql:mysql /var/lib/mysqld/

chown -R mysql:mysql /var/lib/mysql/

chkconfig --add mysqld

chkconfig mysqld on

firewall-cmd --permanent --add-port=3307/tcp

firewall-cmd --reload

源代码安装日志报错:

[ERROR] Can't open and lock privilege tables: Table 'mysql.servers' doesn't exist

2019-11-26T06:06:20.120691Z 0 [ERROR] Native table 'performance_schema'.'cond_instances' has the wrong structure

解决方案:

cd /usr/local/mysql/data

rm -rf *

cd /usr/local/mysql/bin/

./mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data

cat /var/log/mysqld.log  错误日志没有问题,则可以启动

chown -R mysql:mysql /usr/local/mysql

修改root密码为: root123456

use mysql;

UPDATE user SET authentication_string = password ('root123456') WHERE User = 'root';

show global variables like 'port';  ---查看mysql端口

mysql当执行flush privileges刷新用户权限命令报出ERROR 1146 (42S02): Table 'mysql.servers' doesn't exist这样测错误,字面上的意思就很明显说mysql.servers不存在

再次执行命令:

flush privileges;   这样就没问题

vi /etc/my.cnf

# 允许初始化无密码登录

#symbolic-links=0

#skip-grant-tables

mysql> show databases;

ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.   报错解决方案:

 

[root@centosnode01 ~]# set global validate_password_policy=0;

[root@centosnode01 ~]# set global validate_password_length=1;

mysql> SET PASSWORD = PASSWORD('123456');

登录验证是否成功:

mysql -uroot -p  

注意:5.7版本以前的授权方式

mysql> GRANT ALL PRIVILEGES ON *.* TO root@"*"  IDENTIFIED BY "123456" WITH GRANT OPTION;

5.7版本后的授权方式:

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

mysql> flush privileges;

vi /var/log/mysqld.log   多看日志排查问题

===================================结束=======================================

各种授权推演:

一、创建用户:以root用户登录到数据库进行用户创建

  命令:

CREATE USER 'username'@'host' IDENTIFIED BY 'password';

  例如:

CREATE USER 'test_admin'@'localhost' IDENTIFIED BY 'admin@123_S';CREATE USER 'test_admin2'@'%' IDENTIFIED BY '';

note:

username——将要创建的用户名;

host——指定该用户在哪个主机上可以登录,"localhost"指该用户只能在本地登录,不能在另外一台机器上远程登录,如果想远程登录,将"localhost"改为"%",表示在任何一台电脑上都可以登录;也可以指定某台机器可以远程登录;

password——该用户的登录密码,密码可以为空,若为空则该用户可以不需要密码登录服务器。

二、授权:以root用户登录到数据库进行授权

  命令:

GRANT privileges ON databasename.tablename TO 'username'@'host'

   note: 

privileges——用户的操作权限,如SELECT等。如果授予所有权限则使用ALL。

databasename——数据库名称。tablename——表名。如果要给该用户授予对所有数据库和表的相应操作权限则可用*表示,例如*.*

  例如:

GRANT SELECT ON test_db.* TO 'test_admin2'@'%';

flush privileges;

note:必须执行flush privileges;

三、撤销用户权限

  命令:

REVOKE privilege ON databasename.tablename FROM 'username'@'host';

  例如:

REVOKE SELECT ON test_db.* FROM 'test_min'@'%';

四、删除账户及权限:

  命令:

drop user 'username'@'host';

五、查看用户的授权

  命令:

SHOW GRANTS FOR 'username'@'host'

  例如:

mysql> SHOW GRANTS FOR 'test_admin'@'%' ;+----------------------------------------------------------------+| Grants for test_admin@%                                        |+----------------------------------------------------------------+| GRANT USAGE ON *.* TO 'test_admin'@'%'                         || GRANT ALL PRIVILEGES ON `test_manage_db`.* TO 'test_admin'@'%' |+----------------------------------------------------------------+2 rows in set (0.00 sec)

 

MySql安装的中的两个小警告:

  1. [Warning] Failed to set up SSL because of the following SSL library error: SSL context is not usable without certificate and private key

在5.7中,通过ssl方式连接mysql被作为默认和推荐。如果你并不需要(比如web端和db端同一台服务器,db服务器处于web端内网等),就可以不用使用ssl方式。
干掉警告很简单,只要在my.cnf声明跳过ssl就行了。
skip-ssl

 

Mysql 主重复制的准备工作:

Mysql 开启binlog和慢查询日志

binlog日志是二进制日志文件。它有两个作用:
(1) 增量备份,即只备份新增的内容
(2) 用于主从复制等(主节点维护了一个binlog日志文件,从节点从binlog中同步数据)

my.cnf的位置一般在/etc/my.cnf,要在my.cnf中添加:

[mysqld]

log-bin=/var/log/mysql-binlog/mysql-binlog

server-id=1

slow_query_log=ON

slow_query_log_file=/var/log/mysql-show/mysql-slow.log

long_query_time=1

mkdir -p /var/log/mysql-binlog/mysql-binlog  -- 创建的是目录

mkdir -p /var/log/mysql-slow/                -- 创建的是目录,日志文件启动的时候会自动创建

chown -R mysql:mysql /var/log/mysql-slow/

chown -R mysql:mysql /var/log/mysql-binlog/

systemctl start mysqld

show variables like '%log_bin%';

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

| Variable_name                   | Value                                    |

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

| log_bin                         | ON                                       |

| log_bin_basename                | /var/log/mysql-binlog/mysql-binlog       |

| log_bin_index                   | /var/log/mysql-binlog/mysql-binlog.index |

| log_bin_trust_function_creators | OFF                                      |

| log_bin_use_v1_row_events       | OFF                                      |

| sql_log_bin                     | ON                                       |

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

 

查询当前mysql数据库是否开启了慢查询日志功能:

show VARIABLES like '%slow%';

mysql> show VARIABLES like '%slow%';

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

| Variable_name             | Value                              |

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

| log_slow_admin_statements | OFF                                |

| log_slow_slave_statements | OFF                                |

| slow_launch_time          | 2                                  |

| slow_query_log            | OFF                                |

| slow_query_log_file       | /var/log/mysql-slow/mysql-slow.log |

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

不知道设置重启后还是OFF,解决方案

rm -rf /var/log/mysql-slow/mysql-slow.log  该日志为手动创建的,删掉后重启,即可自动生成该日志文件,再次查看慢日志已经打开

mysql> show variables like '%slow%';

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

| Variable_name             | Value                              |

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

| log_slow_admin_statements | OFF                                |

| log_slow_slave_statements | OFF                                |

| slow_launch_time          | 2                                  |

| slow_query_log            | ON                                 |

| slow_query_log_file       | /var/log/mysql-slow/mysql-slow.log |

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

slow_query_log的值是ON,代表当前数据库已经开启了慢查询功能。slow_query_log_file表示慢日志的路径。

还可以查看超过多少秒算是慢查询:

show VARIABLES like 'long_query_time';

mysql> show VARIABLES like 'long_query_time';

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

| Variable_name   | Value    |

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

| long_query_time | 1.000000 |

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

默认是10秒,这里已经被配置为1秒了

查看数据库的存储目录

show variables like '%datadir%';

查询当前mysql数据库是否开启了binlog日志功能:

show VARIABLES like 'log_%';

查看binlog格式:

show variables like 'binlog_format';

获取binlog文件列表:

show binary logs;

只查看第一个binlog文件的内容

show binlog events;

查看当前正在写入的binlog文件

show master status\G;

查看数据库的存储引擎

show engines;

查看某张表的存储引擎:

mysql> use 数据库

show create table 表名;

异常解决方案一:

mysql> alter table servers engine =InnoDB;

ERROR 1050 (42S01): Table './mysql/servers' already exists

 

cd /usr/local/mysql/data/mysql

ls -l | grep  'servers' | wc -l

rm -rf servers.*

把centosnode02机器上所有的mysql库下面的文件全部拷贝到centosnode01机器的mysql库中即可

scp -r * root@centosnode01:/usr/local/mysql/data/mysql/

chown -R mysql:mysql  /usr/local/mysql/  

 

use mysql;

show create table servers; 查看该系统表的存储引擎是否已经更改过来

在master上配置复制所需要的账号,这里创建一个mysql_repl的用户,%表示任何远程地址的mysql_repl用户都可以连接到master主机

centos上的密码是不能被查看的,只能适用root进行修改。

查看整个系统用户的命令:

grep bash /etc/passwd

查看系统中有那些用户

cut -d : -f 1 /etc/passwd

查看可以登录到系统的用户有那些

cat /etc/passwd | grep -v /sbin/nologin | cut -d : -f 1

groupadd mysql_repl

useradd -r -g mysql_repl mysql_repl

passwd mysql_repl   设置用户的密码

123456

GRANT replication slave ON *.* TO 'mysql_repl'@'*' identified by '123456';

flush privileges;

导入数据源:

create database if not exists security;

use security;

mysql> soure /tools/device_data_record.sql

 

发布了74 篇原创文章 · 获赞 4 · 访问量 3201

猜你喜欢

转载自blog.csdn.net/u014635374/article/details/105283535