确认自己的mysql和操作系统版本,我的版本信息如下:
MySQL版本:MySQL5.7.31
操作系统版本:centos7.8
# 查看mmysql版本
mysql -V
mysql Ver 14.14 Distrib 5.7.31, for Linux (x86_64) using EditLine wrapper
# 查看操作系统版本
cat /etc/redhat-release
CentOS Linux release 7.8.2003 (Core)
- 关闭selinux
# vim /etc/sysconfig/selinux
SELINUX=disabled
# 修改后需要重启服务器
reboot
# 重启后检查selinux的状态
sestatus –v
-
停止mysql服务
-> systemctl stop mysqld.service -
修改mysql配置
通过yum安装的mysql配置文件默认路径在 /etc/my.cnf,修改配置文件中修改datadir,socket,log-error这几个参数的路径;完整配置信息如下
-> vim /etc/my.cnf
# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/5.7/en/server-configuration-defaults.html
[mysqld]
#
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M
#
# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin
#
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M
# 数据存放路径
datadir=/home/mysql/data
socket=/home/mysql/data/mysql.sock
# 默认配置
#datadir=/var/lib/mysql
#socket=/var/lib/mysql/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# 日志文件存放路径
log-error=/home/mysql/log/mysqld.log
#log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
# 设置MySQL server编码格式
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
# 关闭SSL
skip_ssl
[client]
port=3306
# 需要在[client]下添加socket参数,否则本地通过 mysql -u root -p连接mysql会报错
socket=/home/mysql/data/mysql.sock
- 创建数据存放目录并拷贝原有数据到新目录下
# 创建数据和日志目录
mkdir -p /home/mysql/data
mkdir -p /home/mysql/log
# 拷贝原有数据到新目录下
cp -a /var/lib/mysql/* /home/mysql/data/
# 创建socket软连接
# 命令格式:ln-s <源文件> <软连接名>
ln -s /home/mysql/data/mysql.socket /var/lib/mysql/mysql.socket
# 如果软连接已存在需要删除当前的软连接重新生成
# 删除软连接直接使用 rm -rf <软连接地址> 命令,不过要注意软连接地址后面不能带 "/"。
# 带"/"命令会删除【软连接目录下的所有文件】,而不是删除【软连接】
rm -rf /var/lib/mysql/mysql.socket
# 修改目录权限
chown mysql.mysql -R /home/mysql/
- 启动mysql
-> systemctl start mysqld.service
-> mysql -u root -p
修改后可以成功登陆mysql
错误汇总
问题:使用 mysql -u root -p 连接mysql时会报错:ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock’ (2)
解决方案:
有可能是 /etc/my.cnf 配置文件中设置了 [mysqld] 的 socket 参数,而没有设置[client]的 socket 参数,在my.cnf配置文件中增加socket参数,参考上面完整配置信息;
mysql导入导出数据
# 参数详解:
# -h 要连接的MySQL数据库ip
# -u MySQL登录账号
# -p MySQL登录账号密码,可以不填写运行命令后会提示输入密码
# schema_name 要导出的数据库名称
# table_name 要导出的表名
# --where 直接写where条件即可
# filePath 生成的文件全路径
mysqldump -h [hostname] -u [username] -p --skip-lock-tables [schema_name] [table_name] --where="search_column='search_value'" --triggers=false --replace>[filePath];
# 命令示例:
# 导出整个schema库表结构和数据命令格式:mysqldump -u root -p schameName > /path/fileName.sql
mysqldump -u root -p test_schema > /home/test_schema.sql
# 根据筛选条件导出制定表的数据
mysqldump -h localhost -u root -p --skip-lock-tables test_schema user_table --where="user_name in('zhangsan','lisi','xiaoming') and is_deleted=0" --triggers=false --replace>/var/lib/mysql-files/user_table.sql;
# 执行数据导入命令
# 登录需要导入数据的mysql服务器
mysql -u root -p
# 选择需要导入的schema库
use test_schema
# 导入SQL文件
source /home/test_schema.sql