迁移-关于mysql的一点问题

上周五终于买了台PC一来当服务器,换下了工作了一年多的老服务器。512M内存的它前一段时间经常遇到各种问题,已经不堪重负了。我们这样规模、这样时期的团队用专用的服务器还是有点奢侈。

更高速的CPU,更大的内存,更大的硬盘。不得不说Linux还是要比Windows方便,硬盘重新挂上之后,重新启用了一下网卡就OK了。然后将数据库和web服务、svn、samba服务的内容迁移到新盘。结果问题就出来了。redmine无法启动。手工用mysql -u -h -p连接数据库,结果是:
Can’t connect to local MySQL server through socket
用sudo service mysql status检查,结果是:
mysql respawn/post-start
看到这篇文章:
ubuntu 10.04 修改my.cnf后导致mysql服务无法启动的问题,发现自己忘了这条:**不可能没日志的,看/var/log/mysql下的日志。检查error.log里发现最后的问题是:
/var/lib/mysql/***.pid 无法创建
问题没有这么严重了。重新换了新的目录后,没有设置/var/lib/mysql目录自己的权限。将owner修改之后问题就解决了。

参考:
1. ubuntu 查看内存指令
2. ubuntu 10.04 修改my.cnf后导致mysql服务无法启动的问题
3. ubuntu速度慢的原因之内存和swap分区
4.

redmine生产环境500错误解决方法

每次遇到wordpress出现500错误的时候都心情抑郁。这种直接导致没有心情继续发日志。生活点滴无法记录的感觉很差。
下午的时候发现让人更为头疼的问题,redmine出现了500错误。

An error occurred on the page you were trying to access.
If you continue to experience problems please contact your redMine administrator for assistance.

对于这种只显示一行英文字的错误,提供的有用信息基本上没有。而对于Linux来说,最好的办法就是查log。
1. Redmine的系统管理员要看这里:
/var/log/redmine/default/production.log
比如我这次发生的错误是:

Parameters: {"action"=>"index", "controller"=>"welcome"}

ActiveRecord::StatementInvalid (Mysql::Error: Got error 28 from storage engine: SHOW FIELDS FROM `setting
s`):
  /usr/lib/ruby/1.8/active_record/connection_adapters/abstract_adapter.rb:219:in `log'

2. 在mysql里测试:
show fields from `settings`;
果然出现ERROR 1030 (HY000): Got error 28 from storage engine

3. 检查磁盘空间:

$ df
Filesystem           1K-blocks      Used Available Use% Mounted on
...                      96118540  91236092         0 100% /

4. 清理足够的空间,问题解决。

参考:
1. Got error 28 from storage engine
2. redMine 500 error
3.

我自己的相关文章:Redmine on Ubuntu

Ubuntu下Subversion集成Redmine用户认证

事实上,没有什么事比这件更让人上火。在此之前,一切如此顺利,apt-get和少有的几个小修改就可以解决,而且Google之后可以得来的资料非常丰富。这一件呢?搜索出来的结果居然会导致配置错误。

话说要完成集成认证,首先要安装这个模块libapache2-mod-auth-mysql,因为我安装的Redmine后台使用的是mysql,如果postgresql或sqlite,那就自行找相关的模块吧。

sudo apt-get install libapache2-auth-mysql

创建视图:

CREATE VIEW users_auth_external AS
SELECT u.login AS username,
       u.hashed_password AS passwd,
       GROUP_CONCAT(p.identifier) AS groups
FROM `members` m
INNER JOIN users u ON m.user_id = u.id
INNER JOIN projects p ON m.project_id = p.id
WHERE u.status = 1
GROUP BY username

配置:

下面列出了两种配置方式,新版本是我在Ubuntu 10.10下缺省使用apt-get安装后可用的版本,但是搜索一般得来的结果以第一种居多(最恶的是在这个模块sourceforge的主站上得到的居然是老版本的内容):

# 老版本 新版本
# AuthMySQLEnable On

AuthMySQLHost 192.168.xxx.xxx

AuthMySQLUser redmine

AuthMySQLPassword redmine_password

AuthMySQLDB redmine087

AuthMySQLUserTable “users, members” #注意这儿跟上不一样

AuthMySQLNameField login

AuthMySQLPasswordField hashed_password

AuthMySQLPwEncryption sha1

AuthMySQL On

AuthMySQL_Authoritative on

AuthMySQL_Host localhost

AuthMySQL_DB my_database

AuthMySQL_User my_database_user

AuthMySQL_Password my_database_password

AuthMySQL_Password_Table users_auth_external

AuthMySQL_Group_Table users_auth_external

AuthMySQL_Username_Field username

AuthMySQL_Password_Field passwd

AuthMySQL_Group_Field groups

AuthMySQL_Encryption_Types SHA1Sum

经常搞不懂这种修改有什么意义。因为看起来就是改变了名字而已。也许是开发人员的习惯或者本尊更换以致于见不得不同风格的内容,但是这种变化给人带来的不便却是显而易见的。即便是开源软件,即便是施福于人的东西,这种变更也让人心生不满。虽然渐近不惑,惑日渐多。不过也容易明白,有时候自己也会做错事。或许不惑之说无外乎警醒我们年华已逝,剩下的时间多干点正事儿吧,又或许是说你想怎么干就怎么干,爽才是真正的不惑吧。

参照:

1. 使用Apache为subversion做出认证
2. Authenticate Apache against Redmine with AuthMySQL
3. libapache2-auth-mysql主站

mysql数据目录修改

缺省的,Ubuntu下的mysql配置文件位于目录/etc/mysql之内。数据文件根据my.cnf,在/var/lib/mysql之内。今天分区的时候没有太想就没有考虑/var/目录单独划区,所以就想将它迁移到单独划区的/opt/目录内。

修改步骤:

# 1. 停掉mysql服务
sudo /etc/init.d/mysql stop

# 2. 移动mysql数据目录
sudo mv /var/lib/mysql /opt/data/mysql

# 3. 创建软链接,这样就不需要修改/etc/mysql/my.cnf文件了
# 老是记不清ln指出的两个哪个是源,以后还是记from to吧
sudo ln -s /opt/data/mysql /var/lib/mysql

# 4. 修改文件所有者
sudo chown mysql.root -R /opt/data/mysql

# 5. 重启动mysql服务
sudo /etc/init.d/mysql start

一个奇怪又有爱的提示:
使用sudo /etc/init.d/mysql …指令的时候,一直会有很好玩的提示,比如sudo /etc/init.d/mysql restart:

Rather than invoking init scripts through /etc/init.d, use the service(8)
utility, e.g. service mysql restart

Since the script you are attempting to invoke has been converted to an
Upstart job, you may also use the restart(8) utility, e.g. restart mysql
mysql start/running

似乎是在推荐使用sudo service mysql命令。。。

参考文章:
1. 修改默认的数据文件存放位置

mysql的一点记录

整理以前记的内容,
[code language=”bash”]
sudo mysql_install_db
sudo /etc/init.d/mysql start
# 参考
#/etc/init.d/mysql start|stop|restart|reload|force-reload|status

# To start repair MySQL, we need to stop it first
## Script to stop mysql server
sudo /etc/init.d/mysql stop

## Start another mysqld instance, but this does not check grants
## (grants are access rights in database terminology).
## This mode is only for troubleshooting, please do NOT use it on a day to day basis
sudo mysqld_safe –skip-grant-tables &

Now start mysql-admin or your favourite MySQL administrative tool, you should be able to login with any user, without password and with full root privileges.
#I haven’t tried adding users and grants, will come back and edit this

Grant ALL on mysql.* TO root;

GRANT ALL PRIVILEGES ON *.* TO root@localhost IDENTIFIED BY “123456”;

# When you’re done adding users and grants, close the client and run
sudo /etc/init.d/mysql stop

# start normal MySQL Daemon (aka server in Linux terminology)
sudo mysqld

# test your new users and passwords with mysql-admin
# Or, if you like command line:
mysql -u your_username -p
# you will be prompted for password
[/code]

参考文章:

1. mysql: access denied for user @locahost

教程:如何在SQL Server中使用其它数据库

在SQL Server中使用其它数据库很简单,关键是使用安全性->链接服务器。具体设置很多网站都有就不再写了。
如果你都设置好了,请看下图:

架构一列比较重要。在SQL Server的某个数据库中要访问这个链接数据库中的表,需要这个名字。
比如
CIJXCPL..DBA.p_fp 对应的p_fp表
CIJXCPL..dbo.ml_script对应的ml_script表。

执行结果如下:

如果你需透明的访问,就是象正常的表一样访问,可以创建视图。简单的创建语句如:
CREATE VIEW V_P_FP AS SELECT * FROM CIJXCPL..DBA.p_fp

这样你就可以在开发工具的客户端看到它了。

参考:
1. 微软关于数据库连接串的帮助
2. 数据库连接字符串大全