一、mysql数据库连接
1、自带的工具
Linux 或 UNIX shell 提示符(终端窗口)
shell> mysql [options]
mysql + 选项
选项: -u 用户名 -p 密码 -h mysql的地址 -P 端口号 -S socket文件 -e 免交互执行mysql命令
查看帮助信息:
shell> mysql --help(或 -?)
查看客户端程序的版本:
shell> mysql --version(或 -V)
连接mysql例:
1、mysql [-uroot -p -S xxxx] 只限定在没有设定任何密码是可以本地登录的方式 2、mysql -uroot -pxxx [S XXXX] 本地Socket连接 3、mysql -uroot -p123 -h 10.0.0.51 -P 3306 应用远程tcp/ip连接串模式
2、应用连接数据库
注意: 需要加载对应语言程序的API
连接前注意:
判断自己的mysql数据库可以对外提供服务
1、netstat -lnp|grep 3306 或 ps -ef | grep mysqld
2、通过 TCP/IP的方式测试连接
mysql -uroot -p123 -h10.0.0.51
连接成功就可以说明对外提供服务了
二、数据库的启动流程与关闭介绍
1、启动
数据库启动的最终结果就是实例的启动,即守护进程mysqld启动,还有线程、预分配的内存结构
我们说mysqld不是自主启动了,它是mysqld_safe这个脚本拉起来的
mysql.server是我们更加方便管理服务的一个脚本(sys-V),程序加上start就可以启动了还可以设置开机自启等,方便,但是不能定制额外的控制,比如分配的内存大小等
对于单机mysql来讲,建议使用mysql.server,方便管理
对于多实例(一台机器多个实例)来讲,mysqld_safe更推荐
2、关闭
(这里的/etc/init.d/mysqld 是指 mysql解压目录下拷贝过去的文件cp support-files/mysql.server /etc/init.d/mysqld)
启动:
/etc/init.d/mysqld start --------> mysqld_dafe ----------> mysqld
关闭:
/etc/init.d/mysqld stop ---------> mysqladmin -uroot -p1 shutdown
servive mysqld stop
kill -9
# 第三种为利用系统进程管理命令关闭Mysql – kill pid #<== 这里的 pid 为数据库服务对应的进程号。 – killall mysqld #<== 这里的 mysqld 是数据库服务对应的进程名字。 – pkill mysqld #<== 这里的 mysqld 是数据库服务对应的进程名字。
三、mysql初始化配置文件
思考:
- 我要启动,我的程序在哪
- 我启动后去哪找数据
- 我启动时候的状态信息和错误信息放哪
- 启动的时候给了我多少内存
- ............
- 还有很多东西都是要在启动前告诉我的
针对以上问题解决方案:
- 可通过预编译的选项 也就是cmake,硬编码到程序中
- 命令行选项 设置初始化配置
- --skip-grant-tables
- --skip-networking
- --socket= socket文件生成到想要的位置
# 先关闭服务
# 例: mysql_safe --socket = /tmp/mysql.sock & # 启动实例的一个脚本 实例启动socket写到tmp目录下 后台运行
如果命令行和预编译是设置了相同参数,以命令行为准
注意:
更改完后登录会报错
启动时人为干预了某些参数,在连接时要用到这些参数时
# mysql -uroot -p1 -S /tmp/mysql.sock
3. 初始化配置文件
配置文件的读取顺序
""" /etc/my.cnf 默认第一个读取 /etc/mysql/my.cnf $MYSQL_HOME/my.cnf 前提是在环境变量中定义了MYSQL_HOME变量 defaults-extra-file=/tmp/a.txt 除了以上的配置文件中 额外加载外部的配置 ~/.my.cnf 隐藏文件 家目录 从上到下读取 """
mysqld_safe 的参数 --defaults-file
如果使用 ./bin/mysqld_safe 守护进程启动 mysql 数据库时,使用了 --defaults-file=< 配置文件的绝对路径> > 参数,
这时只会使用这个参数指定的配置文件,以上任何配置文件都不在读取了.
# mysql_safe --defaults-file=/tmp/a.txt &
思考:
""" cmake: socket=/appliscation/mysql/tmp/mysql.sock 命令行: --socket=/tmp/mysql.sock 配置文件: /etc/my.cnf socket=/opt/mysql.sock --defaults-file=/tmp/a.txt socket=/tmp/test.sock """
问:
socket生成在哪?
命令行 /tmp/mysql.sock
结论:
命令行>配置文件(--defaults-file也是配置文件)>cmake
用的最多的是配置文件,建议不要设置多个配置文件,一个就够了,多了乱
四、配置多实例
实例:后台守护进程+线程+预分配的内存结构
实例要启动:
- 软件
- 数据(一个实例只能管理自己那一部分数据)
多实例
- 不需要多个软件
- 需要多套后台进程+线程+内存结构
- 多个进程意味着多个端口(3307,3308,3309)
- 多个配置文件、多个日志文件,多个socket,多个server_id
- 多个进程意味着多个端口(3307,3308,3309)
(1)准备多套配置文件
mkdir -p /data/330{7..9}
""" /data/3307/my.cnf /data/3308/my.cnf /data/3309/my.cnf """
vim /data/3307/my.cnf
[mysqld] basedir=/application/mysql datadir=/data/3307/data socket=/data/3307/mysql.sock log-error=/data/3307/mysql.log log-bin=/data/3307/mysql-bin server-id=7 port=3307 [client] socket=/data/3307/mysql.sock
[mysqld] basedir=/application/mysql datadir=/data/3308/data socket=/data/3308/mysql.sock log-error=/data/3308/mysql.log log-bin=/data/3308/mysql-bin server-id=8 port=3308 [client] socket=/data/3308/mysql.sock
[mysqld] basedir=/application/mysql datadir=/data/3309/data socket=/data/3309/mysql.sock log-error=/data/3309/mysql.log log-bin=/data/3309/mysql-bin server-id=9 port=3309 [client] socket=/data/3309/mysql.sock
主从会用到现在没什么用
(2)初始化多套数据
/application/mysql/scripts/mysql_install_db --defaults-file=/data/3307/my.cnf --basedir=/application/mysql --datadir=/data/3307/data /application/mysql/scripts/mysql_install_db --defaults-file=/data/3308/my.cnf --basedir=/application/mysql --datadir=/data/3308/data /application/mysql/scripts/mysql_install_db --defaults-file=/data/3309/my.cnf --basedir=/application/mysql --datadir=/data/3309/data
修改权限(如果忘记授权会报错,就要手动创建日志文件)
chown -R mysql.mysql /data/330*
(3)启动多个实例
mysqld_safe --defaults-file=/data/3307/my.cnf & mysqld_safe --defaults-file=/data/3308/my.cnf & mysqld_safe --defaults-file=/data/3309/my.cnf &
查看330*端口是否启动
netstat -lnp|grep 330
如果第一次启动,没成功,就不会再生产日志文件了,手动创建
touch /data/3307/mysql.log touch /data/3308/mysql.log touch /data/3309/mysql.log chown -R mysql.mysql /data/330*
最终效果:
mysql -S /data/3307/mysql.sock -e "show variables like 'server_id'" mysql -S /data/3308/mysql.sock -e "show variables like 'server_id'" mysql -S /data/3309/mysql.sock -e "show variables like 'server_id'"
五、初始化配置文件使用
会用到的
/etc/my.cnf
--defaults-file
1、初始化配置文件能做什么
(1)影响实例启动(最终影响mysqld)
(2)影响客户端程序(例如mysql命令 可不可以把mysql链接时的 参数 添加到配置文件中方便以后登录,是可以的)
2、如何配置初始化配置文件
客户端:
- 通过[client] 标签做一个总的概述,如果[mysql] 和 [mysqldump]相同
- 通过[mysql] 和 [mysqldump] 单独指定标签中的内容
服务器端:
- 通过[server] 标签做一个总的概述,如果[mysqld] 和 [mysql_safe]相同
- 通过[mysqld] 和 [mysqld_safe] 单独指定标签中的内容
简单配置文件格式
# 关于服务器 [mysqld] basedir=/application/mysql # 所有的程序文件都在这个目录 datadir=/application/mysql/data socket=/tmp/mysql.sock log-error=/var/log/mysql.log # 日志文件 错误日志 log-bin=/data/mysql/mysql-bin # 二进制的位置 server-id=6 # server-id 唯一标识实例的id port=3306 # 涉及到关于目录的,首先要有这个目录,创建目录 # 关于客户端 [client] socket=/tmp/mysql.sock
mkdir -p /data/mysql chown -R mysql.mysql /data/mysql/
/etc/init.d/mysqld start