2014-11-06 135 views
0

我试图将trac 1.0实例从一台机器移动到另一台机器。我使用了这里描述的使用hotcopy命令的Trac备份和恢复过程。由于MySql登录失败导致Trac hotcopy备份失败

http://trac.edgewall.org/wiki/TracBackup

我然后创建一个新的MySQL数据库与TRAC新用户,分配相应的权限,然后跑去initenv命令来创建新的trac环境tracadmin。我使用tracd部署了它,它似乎工作正常。

当我试图与即时拷贝备份的内容替换这个清新的环境,我得到以下错误,当我尝试连接到服务器....

我丢失了一些步骤?我更改了MySql权限,以确保它们与我传递给数据库字符串中的trac的密码和用户名相匹配。当我复制新的环境并且trac使用错误的密码连接到MySql时,是否有可能会覆盖它?

任何帮助非常感谢!

Traceback (most recent call last): 
    File "build/bdist.linux-x86_64/egg/trac/web/api.py", line 502, in send_error 
    data, 'text/html') 
    File "build/bdist.linux-x86_64/egg/trac/web/chrome.py", line 955, in render_template 
    message = req.session.pop('chrome.%s.%d' % (type_, i)) 
    File "build/bdist.linux-x86_64/egg/trac/web/api.py", line 304, in __getattr__ 
    value = self.callbacks[name](self) 
    File "build/bdist.linux-x86_64/egg/trac/web/main.py", line 268, in _get_session 
    return Session(self.env, req) 
    File "build/bdist.linux-x86_64/egg/trac/web/session.py", line 206, in __init__ 
    self.get_session(sid) 
    File "build/bdist.linux-x86_64/egg/trac/web/session.py", line 229, in get_session 
    super(Session, self).get_session(sid, authenticated) 
    File "build/bdist.linux-x86_64/egg/trac/web/session.py", line 76, in get_session 
    with self.env.db_query as db: 
    File "build/bdist.linux-x86_64/egg/trac/db/api.py", line 165, in __enter__ 
    db = DatabaseManager(self.env).get_connection(readonly=True) 
    File "build/bdist.linux-x86_64/egg/trac/db/api.py", line 250, in get_connection 
    db = self._cnx_pool.get_cnx(self.timeout or None) 
    File "build/bdist.linux-x86_64/egg/trac/db/pool.py", line 213, in get_cnx 
    return _backend.get_cnx(self._connector, self._kwargs, timeout) 
    File "build/bdist.linux-x86_64/egg/trac/db/pool.py", line 134, in get_cnx 
    raise TimeoutError(errmsg) 
TimeoutError: Unable to get database connection within 0 seconds. (OperationalError: (1045, "Access denied for user 'trac_user'@'localhost' (using password: YES)")) 

回答

1

我永远无法得到这些“hotcopy”指令的工作。他们看起来好像是用sqlite编写的,而不是MySQL。当我迁移我的Trac的实例,以新的服务器,我不得不做以下让我的数据库工作:

# On old server 
$ mysqldump -u admin -padmin_password trac >backup.sql 

# On new server 
$ mysql -u admin -padmin_password 
mysql> CREATE DATABASE trac DEFAULT CHARACTER SET utf8 COLLATE utf8_bin; 
mysql> GRANT ALL ON trac.* TO [email protected] IDENTIFIED BY 'topsecret'; 
mysql> exit 
$ mysql -u admin -padmin_password trac <backup.sql 

替换“trac_account”和“绝密”的用户名和密码的Trac会使用。之后,我能够让Trac运行起来。本质上,忘记Trac是参与的,并将整个事情视为正常的数据库备份和恢复操作。至于Trac的其他部分,我只是在新服务器上使用导入的数据库创建了一个新的Trac实例,然后根据需要从旧服务器复制文件(配置文件,附件,自定义模板等)。

注意:如果相关,我的新旧安装使用与Trac相同的MySQL数据库凭证。如果你要改变凭据作为移动的一部分,YMMV。

+0

'hotcopy'只创建备份,它不会恢复PostgreSQL或MySQL上的数据库转储。您应该在档案中找到MySQL数据库转储,但我从未在MySQL上证实过这一点。数据库必须手动恢复。该命令已记录在[PostgreSQL](http://trac.edgewall.org/wiki/TracBackup#RestoringaBackup)中。随意添加到MySQL的文档。 – RjOllos 2015-01-27 07:12:36